假设我有一个邮政编码的正则表达式。
'\<[0-9]{5}(-[0-9]{4})?\>'
这适用于:
XXXXX
XXXXX-XXXX
但它也匹配以下数字:
XXXX-
.XXXX-
我用什么来防止这种情况发生?
假设我有一个邮政编码的正则表达式。
'\<[0-9]{5}(-[0-9]{4})?\>'
这适用于:
XXXXX
XXXXX-XXXX
但它也匹配以下数字:
XXXX-
.XXXX-
我用什么来防止这种情况发生?
您似乎想将匹配从字符串的开头锚定到结尾,否则它也会尝试匹配输入的部分内容:
'^\<[0-9]{5}(-[0-9]{4})?\>$'
您没有指定此字符串必须是它的开头和结尾。只需添加^
来指示行的开头和$
来指示行的结尾。
所以结果将是:(假设\<
and\>
是您的语言或其他东西所需要的)。
'\<^[0-9]{5}(-[0-9]{4})?$\>'
这是原始海报。
'^\<[0-9]{5}(-[0-9]{4})?\>$'
和
'\<^[0-9]{5}(-[0-9]{4})?$\>'
不要在有噪音的线路上匹配,例如:
lskdjfasfldj XXXXX asfsdfsdf
sdkdsa XXXXX-XXXX asdfsd
这两个正则表达式只匹配一行的开头,而不是一行的中间。
另外,我在带有 grep -E 的 Unix 系统上使用基本的正则表达式。