Regex 正则表达式:匹配所有内容,但不匹配特定的模式

Regex 正则表达式:匹配所有内容,但不匹配特定的模式,regex,Regex,我需要一个能够匹配所有内容的正则表达式,但是需要一个以特定模式开头的字符串(特别是index.php以及后面的内容,比如index.php?id=2342343)只需匹配/^index\.php/然后拒绝匹配它的内容。只需匹配/^index\.php/然后拒绝匹配它的内容。不是regexp专家,但我认为您可以从一开始就使用消极的前瞻,例如^(?!foo).*$不应该匹配任何以foo开始的内容,而不是regexp专家,但我认为您可以从一开始就使用负面前瞻,例如^(?foo)。*$不应该匹配任何以f

我需要一个能够匹配所有内容的正则表达式,但是需要一个以特定模式开头的字符串(特别是
index.php
以及后面的内容,比如
index.php?id=2342343

只需匹配
/^index\.php/
然后拒绝匹配它的内容。

只需匹配
/^index\.php/
然后拒绝匹配它的内容。

不是regexp专家,但我认为您可以从一开始就使用消极的前瞻,例如
^(?!foo).*$
不应该匹配任何以
foo开始的内容,而不是regexp专家,但我认为您可以从一开始就使用负面前瞻,例如
^(?foo)。*$
不应该匹配任何以
foo开始的内容,在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>
>>重新导入
>>>p='^(?!index\.php\?[0-9]+).$'
>>>s1='index.php?12345'
>>>重新匹配(p,s1)
>>>s2='index.html?12345'
>>>关于匹配(p,s2)
在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>
>>重新导入
>>>p='^(?!index\.php\?[0-9]+).$'
>>>s1='index.php?12345'
>>>重新匹配(p,s1)
>>>s2='index.html?12345'
>>>关于匹配(p,s2)

不使用正则表达式如何:

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

不使用正则表达式如何:

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

您可以将
^
放在字符集的开头,以匹配除这些字符以外的任何字符

[^=]*

将匹配除
=

以外的所有字符。您可以在字符集的开头放置一个
^
,以匹配除这些字符以外的任何字符

[^=]*

将匹配所有内容,但
=

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

  • 以特定模式开头的字符串(例如,任意-空,也-不以
    foo开头的字符串
    ):
    • 基于前瞻的NFA解决方案:
  • 针对不支持lookarounds的正则表达式引擎的基于否定字符类的解决方案:
  • 以特定模式结尾的字符串(例如,结尾为no
    world.
    ):
    • 基于查找的解决方案:
    • 前瞻解决方案:
    • POSIX解决方案:
  • 包含特定文本的字符串(例如,与包含
    foo
    的字符串不匹配):
    • 基于查找的解决方案:
    • POSIX解决方案:
      • 使用位于的在线正则表达式生成器
  • 包含特定字符的字符串(例如,避免匹配具有
    |
    符号的字符串):
  • 等于某个字符串的字符串(例如,不等于
    foo
    ):
    • 基于环顾的:
    • POSIX:
  • 字符序列
    • PCRE(匹配除cat以外的任何文本):或
    • 其他引擎允许查找:(或,
      (cat)|[^c]+(?:c(?!at)[^c]*)*(?:c(?!at)[^c]*)+[^c]*
      )然后用语言检查意味着:如果第1组匹配,则它不是我们需要的,否则,如果不是空的,则获取匹配值
  • 某些单个字符或一组字符
    • 使用:(除小写ASCII字母以外的任何字符)
    • 匹配任何字符,但
      |
演示说明:在演示中,换行符
\n
用于否定字符类中,以避免匹配溢出到相邻行。在测试单个字符串时,它们不是必需的

锚注:在许多语言中,使用
\A
定义字符串的明确开头,并使用
\z
(在Python中,它是
\z
,在JavaScript中,
$
是可以的)定义字符串的最末端

点注:在许多风格中(但不是POSIX、TRE、TCL),
匹配除换行符以外的任何字符。确保对
使用相应的DOTALL修饰符(
/s
在PCRE/Boost/.NET/Python/Java中,以及
/m
在Ruby中),以匹配任何字符,包括换行符


反斜杠注释:在必须使用允许转义序列的C字符串声明模式的语言中(如换行符的
\n
),需要将转义特殊字符的反斜杠加倍,以便引擎可以将其视为文字字符(例如,在Java中,
world\。
将被声明为
“world\\”
,或使用字符类:
“world[.]”
)。使用原始字符串文字(Python
r'\bworld\b'
)、C#逐字字符串文字
@“world\”
或类似于
/world\/

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

  • 以特定模式开头的字符串(例如,任意-空,也-不以
    foo开头的字符串
    ):
    • 基于前瞻的NFA解决方案:
  • 针对不支持lookarounds的正则表达式引擎的基于否定字符类的解决方案:
  • 以特定模式结尾的字符串(例如,结尾为no
    world.
    ):
    • 基于查找的解决方案:
    • 前瞻解决方案:
    • POSIX解决方案:
  • 包含特定文本的字符串(例如,与包含
    foo
    的字符串不匹配):
    • 基于查找的解决方案:
    • POSIX解决方案:
      • 使用位于的在线正则表达式生成器
  • 包含特定字符的字符串(例如,避免匹配具有
    |
    符号的字符串):
  • 等于某个字符串的字符串(例如,不等于