匹配从给定字符串中偏离至少一个字符的任何字符串

问题描述 投票:0回答:1

我遇到了一个问题,我需要在一组数字中搜索一个数字,这些数字都以相同的开头但以不同的结尾,例如:

261234
261235
261236
261334
261244
261134 
260234
260134
260123

我可能会补充说,这是在日志文件中带有一些其他乱码,可能会使问题复杂化。假设我想匹配261134以外的任何内容。

我的第一个直觉是尝试26[^1][^1][^3][^4],但与上面的条件都不匹配,因为在某些时候,每个人中的每个人在我指定否定的位置都有一个取反的字符。我能想到的与解决方案最接近的事情是一英里长的表达式,它会像这样将ors链接在一起:

26([^1]134|1[^1]34|11[^3]4|113[^4])

然而,这还不符合所有条件。相反,我应该这样做:

26([^1]\d{3}|\d[^1]\d\d|\d\d[^3]\d|\d{3}[^4])

我想我通过键入此字时会更全面地思考来回答自己的问题,但是我仍然好奇是否有更好的解决方案,因为这真的很难解决更简单的问题,更不用说键入了。我既找不到关于此问题的问题,也找不到解决方案,所以我希望将其留在此处以帮助其他遇到类似问题的人是合适的。

regex pcre regex-negation
1个回答
0
投票
您可以对26进行数学运算,并使用负的前瞻(?!来断言右边的直接数字不是1134。断言成功,匹配4位数字。

为了防止数字成为较大单词的一部分,可以使用单词边界\b

\b26(?!1134)\d{4}\b

Regex demo
© www.soinside.com 2019 - 2024. All rights reserved.