4

我希望我的正则表达式匹配一些值,但不接受其他值。基本正则表达式是^/.+/.+$

/我想不接受最后一部分的问号,不接受peopledungen作为第一/部分。

MATCH: /a/b/c/d
MATCH: /a/b
NO MATCH: /people/b/c/d
MATCH: /peoples/b/c/d
NO MATCH: /a/b/c?x=y

我知道你可以使用[^ABCD]为了不匹配字符,但它不适用于整个字符串。

有什么帮助吗?

4

2 回答 2

4

在最后一个之后拒绝问号/很容易 - 使用字符类[^?]而不是.

^/.+/[^?]+$

要拒绝peopledungen介于两者之间/,可以使用否定前瞻。由于您想拒绝/people/但接受/peoples/前瞻,因此一直到字符串的末尾。

^/(?!(?:people|dungen)/.+$).+/.+$

所以将两者结合起来:

^/(?!(?:people|dungen)/[^?]+$).+/[^?]+$

让我们测试一下。

>>> import re
>>> r = re.compile(r'^/(?!(?:people|dungen)/[^?]+$).+/[^?]+$')
>>> for s in ['/a/b/c/d', '/a/b', '/people/b/c/d', '/peoples/b/c/d', '/a/b/c?x=y']:
...     print not not r.search(s)
...
True
True
False
True
False
于 2013-02-08T18:33:25.677 回答
1

你可以使用

^/(?!(people|dungen)/).+/[^?]+$
于 2013-02-08T18:49:57.843 回答