繁体   English   中英

正则表达式PHP,在特定位置查找单词

[英]Regex PHP , find words in specific location

大家好,这是问题所在:

我得到了一个经典的地址: 25 Park Street 15000 **My city**

我正在寻找一个正则表达式,只能找到这个地址中的城市。

我已经完成了它,我发现了一些好东西: [^ ]*$

问题是这个正则表达式只取我的字符串的最后一个字,我的城市可能有更多的单词ex: **New York**

我知道我必须在邮政编码找到所有字符。

继续搜索,但也许你可以帮助我!

谢谢

假设数字不能出现在城市名称中,您可以使用\\d\\s*(\\D+)$ regex将最后一位数字与可选空格匹配,然后匹配并捕获所有其他字符直到字符串末尾。

\d\s*(\D+)$

请参阅正则表达式演示

IDEONE演示

$str = "25 Park Street 15000 My city"; 
preg_match('/\d\s*(\D+)$/', $str, $matches);
print_r($matches[1]);

另一种选择(稍微复杂一点)是试图找到城市名称的常见模式。 假设它可能包含空格,连字符和单撇号,您可以尝试另一种正则表达式

'/[\p{L}\p{M}]+(?:[- \'][\p{L}\p{M}]+)*$/u'

这里, \\p{L}匹配任何Unicode字母, \\p{M}变音符号, [- ']将匹配连字符或空格或单个撇号。

preg_match('/[\p{L}\p{M}]+(?:[- \'][\p{L}\p{M}]+)*$/u', $str, $matches);

另一个演示

^.*\b\d+\b\s*\K|[\w\s]*$

您可以直接使用它。参见演示。 \\K将忽略非实用的东西。

https://regex101.com/r/kE3sJ0/3

暂无
暂无

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

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