不确定为什么下面没有找到拉链和状态?
$str = 'contact_widget_statezip">NM 87035 ';
$pattern = '[A-Z]{2}\W{1,10}[0-9]{5}';
preg_match_all($pattern, $str, $amatches);
由于 格伦
答案 0 :(得分:1)
尝试一下,
<?php
$str = 'contact_widget_statezip">NM 87035 ';
$pattern = '~([A-Z]{2})\s*([0-9]){5}~';
preg_match_all($pattern, html_entity_decode($str), $amatches);
print_r($amatches);
输出:
Array
(
[0] => Array
(
[0] => NM? 87035
)
[1] => Array
(
[0] => NM
)
[2] => Array
(
[0] => 87035
)
)
这会使您的字符串NM 87035
并将其转换为NM 87035
,因为
= 。然后它搜索两个大写字母,任意数量的空格,然后搜索5个数字。如果您需要空格,请将
*
更改为+
..
...更新
\W{1,10}
在您的示例中不起作用,因为\W
是\w
的反转,它是任何单词字符。 &符,分号和空格属于该组,但nbsp
没有。如果你不想解码实体而只是忽略你可以使用[A-Z]{2}[[a-zA-Z0-9; &]{1,10}[0-9]{5}
的空白,那么对于PHP来说它就是......
<?php
$str = 'contact_widget_statezip">NM 87035 ';
$pattern = '~([A-Z]{2})[a-zA-Z0-9; &]{1,10}([0-9]{5})~';
preg_match_all($pattern, $str, $amatches);
print_r($amatches);
答案 1 :(得分:0)
谢谢Chris,
您的意见有助于解决此问题
下面找到一个邮政编码和状态,并在没有html_entity_decode
的情况下忽略它们之间的垃圾。
$str = 'contact_widget_statezip">NM 87035 ';
$pattern = "\b[A-Z]{2}\b.{1,10}\b[0-9]{5}\b/s";