从PHP中的字符串中选择城市名称的正则表达式
我需要一个PHP正则表达式,用于从长字符串中选择城市名称 基本伪代码如下:从PHP中的字符串中选择城市名称的正则表达式,php,regex,Php,Regex,我需要一个PHP正则表达式,用于从长字符串中选择城市名称 基本伪代码如下: if ( "v" or "V" or "vo" or "Vo" or "pri" or "Pri" or "od" or "Od" or "z" or "Z" or "na" or "Na" or "nad" or "Nad" or "do"
if (
"v" or "V" or
"vo" or "Vo" or
"pri" or "Pri" or
"od" or "Od" or
"z" or "Z" or
"na" or "Na" or
"nad" or "Nad" or
"do" or "Do" or
"pod" or "Pod"
is_before "String" or
"String String" or
"String string String" or
"String String String"
)
do
{
add "String String String" to array"
}
示例:
我表弟住在普里城通过{城市}
是的,我想我会的通过{Velkom Krtisi}
德内斯·索姆·杰多尔·帕拉辛基诉杜布尼奇·纳德·瓦霍姆案。-通过{Dubnici nad Vahom}
我的尝试:
preg_match_all('/..[V|v|pri|Pri|Od|od|Do|do|Z|z|na|Na|Nad|nad][ ][A-Z]{0,10}/', $string, $matches, PREG_OFFSET_CAPTURE);
提前谢谢你。你弄糊涂了。无论何时使用方括号,都只能匹配一个字符。所以
[V|v|pri|Pri|Od|od|Do|do|Z|z|na|Na|Nad|nad]
等于
[|VvpriOddDoZznaN]
请注意,|
只是其中的另一个文字字符。另外,两个。
是如何开始的?他们只是在比赛中给你(并要求)两个以上的角色。最后,(?:\s+[a-zA-Z]+){1,3}
最匹配三个单词
最后,您需要捕获所需的零件(使用括号):
现在,$matches[1]
将在字符串中包含所有城市(包括前导空格)及其偏移量
您可能可以通过使用i
修饰符(不区分大小写)来缩短此时间。当然,例如,这将允许pRI
,但这可能不是问题。此外,您可能希望添加单词边界,以便像abcdefv foobar
这样的事情不会触发匹配(由于后面的v
):
当然,如果省略了PREG\u OFFSET\u CAPTURE
,您只需要得到更适合伪代码的城市
为什么最后一个示例会通过?城市名称前面没有提到的任何单词。
preg_match_all('/(?:V|v|pri|Pri|Od|od|Do|do|Z|z|na|Na|Nad|nad)((?:\s+[A-Za-z]+){1,3})/', $string, $matches, PREG_OFFSET_CAPTURE);
preg_match_all('/\b(?:vo?|pri|od|do|z|nad?)((?:\s+[a-z]+){1,3})/i', $string, $matches, PREG_OFFSET_CAPTURE);