我需要一个正则表达式能够匹配所有但,一个以特定模式开头的字符串(特别是index.php及其后面的内容,如index.php?id=2342343)。
index.php
index.php?id=2342343
只匹配/^index\.php/,然后拒绝匹配它的任何东西。
/^index\.php/
你可以从一开始就使用负前向,例如,^(?!foo).*$不应该匹配以foo开头的任何内容。
^(?!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>
你可以在字符集的开头放置^来匹配除这些字符以外的任何字符。
^
[^=]*
将匹配除=
=
正则表达式:匹配所有但:
^(?!foo)
^(([^f].{2}|.[^o].|.{2}[^o]).*|.{0,2})$
^([^f].{2}|.[^o].|.{2}[^o])|^.{0,2}$
world.
(?<!world\.)$
^.*(?<!world\.)$
^(?!.*world\.$).*
^(?!.*world\.$)
^(.*([^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})$
^(?!.*foo)
^(?!.*foo).*$
|
^[^|]*$
^(?!foo$)
^(?!foo$).*$
^(.{0,2}|.{4,}|[^f]..|.[^o].|..[^o])$
cat
/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]*
[^a-z]+
[^|]+
演示报告:换行符\n在演示中的反字符类中使用,以避免匹配溢出到相邻行。在测试单个字符串时,它们是不必要的。
\n
锚注:在许多语言中,使用\A来定义字符串的明确开头,使用\z(在Python中是\Z,在JavaScript中是$)来定义字符串的结尾。
\A
\z
\Z
$
点注意:在许多类型中(但不包括POSIX, TRE, TCL), .匹配任何字符而是换行符字符。确保使用了相应的DOTALL修饰符(PCRE/Boost/中的/s。NET/Python/Java和Ruby中的/m),以便.匹配包括换行符在内的任何字符。
.
/s
/m
反斜杠注意:在必须使用允许转义序列的C字符串声明模式的语言中(如\n为换行符),您需要使用双反斜杠来转义特殊字符,以便引擎可以将它们视为文字字符(例如,在Java中,world\.将被声明为"world\\.",或使用字符类:"world[.]")。使用原始字符串字面量(Python r'\bworld\b'), c#逐字字符串字面量@"world\.",或斜杠字符串/正则表达式字面量符号,如/world\./。
world\.
"world\\."
"world[.]"
r'\bworld\b'
@"world\."
/world\./