繁体   English   中英

正则表达式从PHP中的字符串中选择城市名称

[英]regular expression to select city names from string in PHP

我需要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"  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"

}

例子:

我的表弟生活在城市。 - 通过{City}

Ja som bol vo Velkom Krtisi。 - 通过{Velkom Krtisi}

Dnes som jedol palacinky v Dubnici nad Vahom。 - 通过{Du​​bnici 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}

最后,您需要捕获所需的部分(使用括号):

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);

现在$matches[1]将包含所有城市(包括前导空格)及其在字符串中的偏移量。

你可以通过使用i修饰符(不区分大小写)来缩短它。 当然,这将允许pRI ,但也许这不是问题。 此外,您可能希望添加单词边界,以便像abcdefv foobar这样的东西不会触发匹配(由于尾随v ):

preg_match_all('/\b(?:vo?|pri|od|do|z|nad?)((?:\s+[a-z]+){1,3})/i', $string, $matches, PREG_OFFSET_CAPTURE);

当然,如果PREG_OFFSET_CAPTURE ,您只需更好地获得符合伪代码的城市。

工作演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM