首页 > 解决方案 > Regex/Shell - 如何匹配除具有特定模式的所有内容

问题描述

我需要 shell 中的正则表达式来匹配除具有特定模式的字符串之外的所有字符串。

我的特定模式可以是可变的,即每个字符串中的 (i|I)[2 位数字](u|U)[2 位数字] 不应匹配。

例如 :

Some.text.1234.text => 应该匹配
Some.text.1234.i10u20.text => 不应该匹配 Some.text.1234.I01U02.text => 不
应该匹配
Some.text.1234.i83U23.text => 不应该匹配

标签: regexshell

解决方案


你可以试试:

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

演示

解释:

  1. ^行首
  2. ?!.*消极展望
  3. [tuTU]\d{2}检查是否存在仅跟随 2 位数字的此类字符
  4. .*$如果先前的条件是否定的,则将整个字符串匹配到字符串末尾$

推荐阅读