RegEx号码未被其他号码包围

时间:2010-11-19 21:52:29

标签: php regex preg-match-all

我正在尝试获取一个未被任何其他数字包围的六位数字,并且不是一系列数字。此数字可以存在于字符串的开头,其中的任何位置以及最后。它前面也可以有逗号和文字,但最重要的是6位数字块。我已经把头发拉出来做前瞻和条件,找不到解决所有问题的完整解决方案。

示例数据:

00019123211231731ORDER NO 761616 BR ADDRESS 123 A ST
ORDER NO. 760641 JOHN DOE
REF: ORDER #761625
OP212312165 ORDER NUMBER 759699 /REC/YR 123 A ST
766911
761223,761224,761225

3 个答案:

答案 0 :(得分:4)

(^|\D)(\d{6})(\D|$)。您将在捕获组2中找到所需的6位数匹配。请注意,此解决方案仅对一次匹配可靠。它不会在123456,567890中找到这两个数字(感谢Alan指出这一点!)。如果需要多个匹配项,则应使用环视解决方案。

环顾四周:

(?<=^|\D)\d{6}(?=\D|$)

或环顾四周,条件为有效数字(即第一个数字不为0):

(?<=^|\D)[1-9]\d{5}(?=\D|$)

答案 1 :(得分:2)

您可以使用负面反对负面预测来确保匹配项旁边没有数字:

(?<!\d)\d{6}(?!\d)

匹配数字,而不是相邻的字符 此外,如果匹配位于字符串的开头或结尾,它也可以使用。

答案 2 :(得分:-1)

难道你不能轻易使用这个正则表达式

[^0-9](\d{6})[^0-9]

它应该匹配任何6位数字,而不是任何其他数字填充。因此不是顺序。

相关问题