[英]use regular expression to select part of html tag from string in 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。 - 通过{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}
。
最后,您需要捕获所需的部分(使用括号):
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.