正则表达式 - 包含模式但不以xyz开头

时间:2013-06-19 06:17:04

标签: regex

我正在尝试匹配文本文件中的数字模式。

该文件可以包含

等值
12345 567890
90123 string word word 54616
98765

该模式应匹配任何包含不以1234开头的5位数字的行

我尝试过使用((?!1234).*)[[:digit:]]{5}但是没有达到预期效果。

编辑:模式可以出现在行中的任何位置,并且仍应匹配

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

如果该行不以'12345'开头,则此正则表达式适用于匹配包含至少5位数的数字的行:

^((?!12345).*\d{5}.*)$

简短说明:

                              ^((?!12345).*\d{5}.*)$   _____________
                              ^ \_______/\/\___/\/ ^__|match the end|
 _____________________________|    |    _|   |   |__  |of the line  |
|match the start of a line|        |   |   __|____  |
     ______________________________|_  | |match ey| |
    |look ahead and make sure the    | | |exactly | |
    |line does not begin with "12345"| | |5 digits| |
                                    ___|_____       |
                                   |match any|______|
                                   |character|
                                   |sequence |


修改的:
似乎问题已被编辑,因此该解决方案不再反映OP的要求。我仍然会留在这里以防万一有人在这个页面上寻找类似的东西。

答案 1 :(得分:1)

以下方法可行,使用\b匹配字词边界,例如字符串空格的开头:

\b(?!12345)\d{5}.*

答案 2 :(得分:0)

试试这个,包含至少5个十进制数字,但不包含12345,使用负面看法

\d{5,}(?<!12345)