正则表达式:匹配除特定模式之外的所有内容

pis*_*hio 255 regex

我需要一个正则表达式,能够匹配除了以特定模式开头的字符串之外的所有内容(具体而言index.php,如下所示index.php?id=2342343)

Wik*_*żew 271

正则表达式:匹配所有内容,:

演示注释:新行\n用于演示中的否定字符类,以避免匹配溢出到相邻行.在测试单个字符串时不需要它们.

锚注:在许多语言中,用于\A定义字符串的明确开始,并且\z(在Python中\Z,在JavaScript中,$可以)定义字符串的最后一端.

点注:在许多风格(但不是POSIX,TRE,TCL)中,.匹配任何字符,匹配换行符.确保使用相应的DOTALL修饰符(/s在PCRE/Boost/.NET/Python/Java和/mRuby中).来匹配任何包含换行符的字符.

反斜杠注意:在必须使用允许转义序列的C字符串声明模式的语言中(例如\n换行符),需要将转义特殊字符的反斜杠加倍,以便引擎可以将它们视为文字字符(例如,在Java中,world\.将是声明为"world\\.",或使用字符类:) "world[.]".使用原始字符串文字(Python r'\bworld\b'),C#逐字字符串文字@"world\."或斜杠字符串/正则表达式文字符号/world\./.

  • @GrantHumphries:当`$`锚在前瞻内部时,它是条件的一部分,是*零宽度断言*的一部分.如果它在外面,比如在`^(?!foo)$`中,它将成为*consume*模式的一部分,需要在字符串开始之后立即结束字符串,使得负向前瞻不相关,因为它总是会返回*true*(字符串结尾后不能有任何文本,更不用说`foo`).所以,`^(?!foo $)`匹配一个字符串的开头,后面跟着字符串结尾的`foo`.`^(?!foo)$`匹配一个空字符串. (3认同)

Fir*_*.io 245

您可以^在字符集的开头添加一个除了那些字符之外的任何内容.

[^=]*
Run Code Online (Sandbox Code Playgroud)

会匹配一切但是 =

  • 这是真的,但它一次只处理一个角色.如果你想排除两个或多个字符的序列,你必须像其他响应者所说的那样使用负向前瞻. (50认同)

Cat*_*lus 208

不是正则表达式专家,但我认为你可以从一开始就使用负面的预测,例如,^(?!foo).*$不应该匹配任何开头的东西foo.

  • 这个答案是错误的,快速测试表明.我想你的意思是`^((?!foo).)*$`(/sf/answers/28448591/) (10认同)
  • 使用grep使用-P启用前瞻. (5认同)
  • 如果您想要的行为不匹配“foo”或“bar”,请检查此答案:http://stackoverflow.com/a/2404330/874824 (2认同)
  • 请您解释一下您使用的符号以及为什么使用它们吗? (2认同)

小智 5

只是匹配,/^index\.php/然后拒绝任何匹配的内容。


AJ.*_*AJ. 5

在python中:

>>> import re
>>> p='^(?!index\.php\?[0-9]+).*$'
>>> s1='index.php?12345'
>>> re.match(p,s1)
>>> s2='index.html?12345'
>>> re.match(p,s2)
<_sre.SRE_Match object at 0xb7d65fa8>
Run Code Online (Sandbox Code Playgroud)

  • 那将拒绝“ index_php”或“ index#php”。 (3认同)