我需要一个能够匹配所有内容的正则表达式,但是需要一个以特定模式开头的字符串(特别是index.php以及后面的内容,比如index.php?id=2342343)
正则表达式:匹配所有但:
- 以特定模式开头的字符串(例如,任意-空,也-不以
foo开头的字符串):- 基于前瞻的NFA解决方案:
^(?!foo)。*$^(?!foo)
- 基于前瞻的NFA解决方案:
- 针对不支持lookarounds的正则表达式引擎的基于否定字符类的解决方案:
^(([^f].{2}.[o].{2}[^o]).*.{0,2})$^([^f].{2}.[^o].{2}[^o]).{0,2}$
- 以特定模式结尾的字符串(例如,结尾处没有
world.):- 基于查找的解决方案:
(?<;!world\)$^.*(<;!world\)$
- 前瞻解决方案:
^(?。*world\.$).^(?。*world\.$)
- POSIX解决方案:
([^w].{5}.[^o].{4}.{2}.[^r].{3}.{3}.[^l].{2}.{4}.[^d].{5}.[^.]$$.{0,5})$
- 基于查找的解决方案:
- 包含特定文本的字符串(例如,与包含
foo的字符串不匹配):- 基于查找的解决方案:
^(?。*foo)^(?。*foo.*$
- POSIX解决方案:
- 使用www.formauri.es/personal/pgimeno/misc/non-match-regex上的在线正则表达式生成器
- 基于查找的解决方案:
- 包含特定字符的字符串(例如,避免匹配具有
|符号的字符串):^[^ |]*$
- 一个字符串等于某个字符串(比如,不等于
foo):- 基于环顾的:
^(?!foo$)^(?!foo$).$
- POSIX:
^(.{0,2}.{4,}.[^f].[^o].[124o].[^o])$
- 基于环顾的:
- 字符序列:
- PCRE(匹配除猫以外的任何文本):
/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i或/cat(*SKIP)(*FAIL)|(?:(!cat)。+/is - 允许环视的其他引擎:
(cat)[^c]*(?:c(?!at)[^c]*)*(或(?s)(cat)(?:(?:(?!cat)。*,或(cat)[^c]+(?:c(?!at)[^c]*(?:c(?!at)[^c]*)+[^c]*)然后用语言方式检查:如果第1组匹配,它不是我们需要的,否则,请获取匹配值
- PCRE(匹配除猫以外的任何文本):
- 某些单个字符或一组字符:
- 使用否定字符类:
[^a-z]+(除小写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[.])。使用原始字符串文字(Pythonr'\bworld\b'),C#逐字字符串文字@“world\”,或像/world\/这样的slashy字符串/regex文字符号