我需要一个正则表达式,它能够匹配除以特定模式开头的字符串(特别是index.php及其后面的字符串,如index.php?id=2342343)以外的所有字符串。
index.php
index.php?id=2342343
o4tp2gmn1#
正则表达式:匹配所有项**,但不匹配**:
foo
^(?!foo).*$
^(?!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
\A
\z
\Z
$
.
/s
/m
world\.
"world\\."
r'\bworld\b'
@"world\."
/world\./
tag5nh1u2#
您可以从一开始就使用负前瞻,例如,^(?!foo).*$不应匹配以foo开头的任何内容。
n3schb8v3#
您可以在字符集的开头放置一个^,以匹配除这些字符之外的任何字符。
^
[^=]*
将匹配除=之外的所有内容
=
3pvhb19x4#
只需匹配/^index\.php/,然后拒绝任何匹配的内容。
/^index\.php/
nhaq1z215#
在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>
am46iovg6#
我有这个问题的多重搜索和替换。需要一个负模式跳过匹配,直到下一次搜索
import re text = "alex ![image]dfsf(dfd.png) [image]fsdf(dfd.png) home ![image]fdsf(dfd.png) end" replaced_text = re.sub(r'!\[image\](.*)\(.*\.png\)', '*', text) print(replaced_text)
给
alex * end
基本上中间部分一直在 Gulp 直到下一个.png使用了Firish的https://stackoverflow.com/a/17761124/429476方法,得到了我想要的结果,这里字符空间不匹配;后面的单词用空格隔开
.png
replaced_text = re.sub(r'!\[image\]([^ ]*)\([^ ]*\.png\)', '*', text)
得到了我想要的
alex * [image]fsdf(dfd.png) home * end
6条答案
按热度按时间o4tp2gmn1#
正则表达式:匹配所有项**,但不匹配**:
foo
开头的字符串):^(?!foo).*$
^(?!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
):^(?!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]*
),然后检查语言表示:如果组1匹配,则它不是我们需要的,否则,如果不为空,则获取匹配值[^a-z]+
(小写ASCII字母以外的任何字符)|
以外的任何字符:[^|]+
\n
用于演示中的求反字符类中,以避免匹配溢出到相邻行。2当测试单个字符串时,它们不是必需的。\A
来定义字符串的明确开头,使用\z
(在Python中是\Z
,在JavaScript中是$
)来定义字符串的结尾。.
匹配除换行符 * 字符之外的任何字符。确保为.
使用相应的DOTALL修饰符(PCRE/Boost/. NET/Python/Java中的/s
和Ruby中的/m
)来匹配包括换行符的任何字符。\n
表示换行符),你需要将转义特殊字符的反斜杠加倍,这样引擎就可以将它们视为文字字符(例如在Java中,world\.
将被声明为"world\\."
,或者使用一个字符类:使用原始字符串常量(Pythonr'\bworld\b'
)、C#逐字字符串常量@"world\."
或slashy字符串/正则表达式常量符号(如/world\./
)。tag5nh1u2#
您可以从一开始就使用负前瞻,例如,
^(?!foo).*$
不应匹配以foo
开头的任何内容。n3schb8v3#
您可以在字符集的开头放置一个
^
,以匹配除这些字符之外的任何字符。将匹配除
=
之外的所有内容3pvhb19x4#
只需匹配
/^index\.php/
,然后拒绝任何匹配的内容。nhaq1z215#
在Python中:
am46iovg6#
我有这个问题的多重搜索和替换。需要一个负模式跳过匹配,直到下一次搜索
给
基本上中间部分一直在 Gulp 直到下一个
.png
使用了Firish的https://stackoverflow.com/a/17761124/429476方法,得到了我想要的结果,这里字符空间不匹配;后面的单词用空格隔开
得到了我想要的