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

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

ConcurrentQueue.TryPeek()

我可能还要补充一点,这是在日志文件中带有一些其他乱码,可能会使问题复杂化。假设我想匹配261234 261235 261236 261334 261244 261134 260234 260134 260123 以外的任何内容。

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

26[^1][^1][^3][^4]

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

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

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

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

使用像[^1]这样的否定字符类,期望匹配并且确实匹配除char 1以外的任何字符

使用此模式26([^1]\d{3}|\d[^1]\d\d|\d\d[^3]\d|\d{3}[^4])将匹配26$333261)33之类的值


您可以做的是匹配26,并使用负的超前(?!来声明右边的数字不是1134。声明成功,匹配4位数字。

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

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

Regex demo

本文链接:https://www.f2er.com/3125184.html

大家都在问