我有匹配英国邮政编码第一部分的正则表达式:
/^[A-Z]{1,2}[0-9]{1,2}$/
但是我想允许多个这样的,所以需要检查以下条目:
BT5,BT6,BT9, BT43, BT21
即,用逗号或逗号和空格分隔的多个条目。
为了达到这个目的,我应该为正则表达式添加什么?
答案 0 :(得分:2)
我假设不允许使用前导或尾随逗号,并且需要至少有一个条目。这给了你:
/^\s*[A-Z]{1,2}[0-9]{1,2}(?:\s*,\s*[A-Z]{1,2}[0-9]{1,2})*\s*$/
<强>解释强>
^ # Start of string
\s* # Match optional whitespace
[A-Z]{1,2}[0-9]{1,2} # Match one postcode
(?: # Start of (repeated) noncapturing group:
\s*,\s* # Match a comma, optionally surrounded by whitespace
[A-Z]{1,2}[0-9]{1,2} # Match one postcode
)* # Repeat as needed (including zero times)
\s* # Match optional whitespace
$ # End of string
答案 1 :(得分:2)
像这样展开它(参见regex demo):
^[A-Z]{1,2}[0-9]{1,2}(?:, ?[A-Z]{1,2}[0-9]{1,2})*$
(?:, ?[A-Z]{1,2}[0-9]{1,2})*
匹配零次或多次... , ?
带有可选空格的逗号...... [A-Z]{1,2}[0-9]{1,2}
在PHP中:
$regex = '~^[A-Z]{1,2}[0-9]{1,2}(?:, ?[A-Z]{1,2}[0-9]{1,2})*$~';
if (preg_match($regex, $yourstring, $m)) {
$thematch = $m[0];
}
else { // no match...
}
答案 2 :(得分:0)
你可以实现一个像这样的正则表达式:
/[A-Z]{1,2}[0-9]{1,2}/
然后你可以使用:
preg_match_all("/[A-Z]{1,2}[0-9]{1,2}/", "BT5,BT6,BT9, BT43, BT21", $matches);
检索所有匹配的数组。
如果你想要一个只接受带有一些&#34;噪音的字符串的正则表达式&#34;在邮政编码之间,您可以尝试:
/^([A-Z]{1,2}[0-9]{1,2})(, ?([A-Z]{1,2}[0-9]{1,2}))*$/
使用[ ,]
允许介于两者之间的字符列表(如空格和逗号)。