正则expression式:匹配一切,但

我需要一个正则expression式能够匹配一切, 一个string以特定模式开始(特别是index.php和以下,如index.php?id=2342343

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

你可以在字符集的开始处加一个^来匹配除这些字符以外的任何内容。

 [^=]* 

将匹配一切,但=

正则expression式:匹配一切,

  • 一个以特定模式开始string (例如,任何 – 空,也是 – string不以foo开头):
    • 用于NFA的基于Lookahead的解决scheme:
      • ^(?!foo).*$
      • ^(?!foo)
    • 不支持lookarounds的正则expression式引擎的基于字符类的解决scheme:
      • ^(([^f].{2}|.[^o].|.{2}[^o]).*|.{0,2})$
      • ^([^f].{2}|.[^o].|.{2}[^o])|^.{0,2}$
  • 一个以特定模式结尾string (比如说,没有world.
    • 基于Lookbehind的解决scheme:
      • (?<!world\.)$
      • ^.*(?<!world\.)$
    • POSIX解决方法:
      • ^(.*([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.])|.{0,5})$
      • ([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.]$|^.{0,5})$
  • 一个包含特定文本string (比如不匹配一个有foo的string)(不符合POSIX的patern,对不起):
    • ^(?!.*foo)
    • ^(?!.*foo).*$
  • 一个包含特定字符string (比如避免匹配一个带有|符号的string):
    • ^[^|]*$
  • 一个string等于一些string (比如说,不等于foo ):
    • 环视为主:
      • ^(?!foo$)
      • ^(?!foo$).*$
    • POSIX:
      • ^(.{0,2}|.{4,}|[^f]..|.[^o].|..[^o])$
  • 一系列字符
    • PCRE (匹配任何文本,但是cat ): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
    • 其他引擎允许lookarounds:( (cat)|[^c]*(?:c(?!at)[^c]*)* (或(?s)(cat)|(?:(?!cat).)*(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]* ),然后用语言来检查是否意味着:如果组1匹配,则不是我们所需要的,否则,如果不为空,则获取匹配值
  • 某个单个字符或一组字符
    • 使用否定字符类 : [^az]+ (除了小写ASCII字母以外的任何字符)
    • 匹配任何字符,但是|[^|]+

演示说明 :在演示中使用否定字符类时使用了换行符\n ,以避免匹配溢出到相邻的行。 testing单个string时不需要它们。

锚注 :在许多语言中,使用\A定义string的明确开始,而\z (在Python中,它是\Z ,在JavaScript中$是OK)来定义string的最后一个结尾。

点注 :在许多口味(但不是POSIX,TRE,TCL)中. 匹配任何字符, 但换行符字符。 确保你使用了对应的DOTALL修饰符(在PCRE / Boost / .NET / Python / Java和/m中的/s. 以匹配包括换行符的任何字符。

反斜杠注意 :在语言中,必须使用允许转义序列的Cstring来声明模式(例如换行符为\n ),则需要将反斜杠的两倍转义为特殊字符,以便引擎可将其视为文字字符(例如,在Java中, world\.将被声明为"world\\." ,或者使用一个字符类"world[.]" )。 使用原始string文字(Python r'\bworld\b' ),C#逐字string文字@"world\." ,或像/world\./这样的/world\./string/正则expression式文字符号。

只要匹配/^index\.php/然后拒绝任何匹配。

grep -v在shell中

!〜在perl中

请用其他语言添加更多内容 – 我将其标记为“社区Wiki”。

在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> 

如何不使用正则expression式:

 // In PHP 0 !== strpos($string, 'index.php')