试图提取;郊区名称“;从「;12街道名称、郊区名称、CTG 1234“;在php中使用regexp
我正试图从以下内容中提取郊区名称:试图提取;郊区名称“;从「;12街道名称、郊区名称、CTG 1234“;在php中使用regexp,php,regex,Php,Regex,我正试图从以下内容中提取郊区名称: 12 street name, suburb name, CTG 1234 在PHP中使用regexp 街道和郊区名称可以是任意字长的数字 CTG是state的首字母缩略词,它总是为人所知,而且总是相同的 它后面是4位数的邮政编码 我已经想出了下面的正则表达式,但不能完全理解我想要的 /[\.|,]+\s*(.*?)[\.|,]+*\s*CTG\d{4,4}$/i 其中: CTG\d{4,4}$是从左侧查找邮政编码和状态 [\.\124;,]*\
12 street name, suburb name, CTG 1234
在PHP中使用regexp
- 街道和郊区名称可以是任意字长的数字李>
- CTG是state的首字母缩略词,它总是为人所知,而且总是相同的李>
- 它后面是4位数的邮政编码李>
/[\.|,]+\s*(.*?)[\.|,]+*\s*CTG\d{4,4}$/i
其中:
是从左侧查找邮政编码和状态CTG\d{4,4}$
是在街道和郊区名称后匹配至少一个点或coma,后跟零个或多个空格李>[\.\124;,]*\ s*
是为了捕获我的目标。郊区名称李>(.*)
因此它将是非贪婪的*?
=全部匹配欠费[0]
=街道名称、郊区名称arrey[1]=12
但是,如果在中尝试,它似乎可以正常工作。试试这一个
^(.*)[\.]\s+(.*)[\.]\s+CTG\s+(\d+)$
提取匹配的组号。2看起来您遗漏了CTG和数字之间的空格(而且句点不需要在括号内转义,也不需要或管道)。这应该适合您的需要:
/.*[.,]+\s*(.*)[.,]+\s*CTG\s*\d{4,4}$/i
您可以在上通过示例文本查看上述模式。您可以通过以下方式获得郊区名称:
$str = '12 street name, suburb name, CTG 1234';
$pattern = '/[^.,]++(?=[.,]\s*CTG \d{4}$)/';
preg_match($pattern, $str, $result);
echo $result[0];
为了只匹配郊区名称,我使用了一个前瞻断言(?=…)
,它只执行一个检查而不记录匹配
图案详情:
/
[^.,]++ # all that is not a . or a , one or more times (possessive)
(?= # open lookahead assertion (means "followed by")
[.,]\s* # a . or a , with optional white characters
CTG \d{4}$ # CTG, a space, four digits, end of string
) # close the lookahead
/
分隔符未定义。可以是逗号或圆点。因此您可以使用
preg\u split
定义多个分隔符。那么问题是什么,您只希望array[1]
包含郊区名称
?是的。希望arrey[1]只包含郊区名称。谢谢。你的regexp正在工作!更好的是,只显示arrey[0]=郊区名称。您是如何得到欠款的[0]包含郊区名称而不是整个匹配?请解释一下。