繁体   English   中英

正则表达式匹配除此正则表达式之外的所有内容

[英]Regex to match everything except this regex

我认为对很多人来说这是一件简单的事情,但目前我对正则表达式的知识非常有限。 我希望匹配除字符串中的两位数字之外的所有内容。

例如:

测试 22 KLO4567

QE 45 C2C

LOP 10 G7G400

现在我发现正则表达式匹配两位数字:\\ d {2}

符合以下条件:

测试22 KLO4567

QE 45 C2C

LOP 10 G7G400

现在在我看来,将这个正则表达式转换为匹配所有内容但是“\\ d {2}”相当容易。 我搜索了很多,但我似乎无法完成它。 我希望这里有人可以提供帮助。

这仅适用于正则表达式引擎支持后面的内容:

^.+?(?=\d{2})|(?<=\d{2}).+$

说明:

| 将两种情况分开:

  • ^ +?(?= \\ d {2})

这匹配从字符串开头( ^ )到遇到\\d{2}内容。

  • (?<= \\ d {2})。+ $

这匹配字符串的结尾,从两位数后面的位置。

如果你的正则表达式引擎不支持外观(例如JavaScript),我认为使用纯正则表达式解决方案是不可能的。

你可以匹配第一部分:

^.+?(?=\d{2})

然后获取匹配结束的位置,将2添加到该数字,并从该索引获取子字符串。

你正确拒绝正则表达式中的搜索通常是相当棘手的。

在你的情况下,我认为你想要[^\\d{2}] ,但是,这很棘手,因为你的其他字符串也包含两位数,所以使用它的正则表达式不会选择它们。

我会使用这个正则表达式(使用PCRE 8.36但也应该在其他人工作):

\\*{2}\\w*\\*{2}

说明:

\\*{2} ....精确地匹配“*”两次
\\w* ....匹配“单词字符”零或无限次

找到一个正则表达式很简单:

^(.*?[^\d])\d{2}([^\d].*?)$

解释:

  • ^:匹配行的开头
  • (。*?[^ \\ d]):匹配并捕获两个数字之前的第一部分。 它可以包含任何东西(。*?),但需要以不同的数字([^ \\ d])结束,所以我们确保中间只有2个数字
  • \\ d {2}:是你自己找到的部分
  • ([^ \\ d]。*?):是(。*?[^ \\ d])的对称:从不同于数字([^ \\ d])的东西开始,然后匹配任何东西。
  • $:直到最后一行。

要测试此reges,您可以使用此链接

它将匹配第一次出现的两位数,但因为OP说只有一个它正确地完成了工作。 我希望它可以与每个正则表达式引擎一起使用,因为没有太复杂的使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM