正则表达式以排除前缀和后缀

3

我正在尝试构建一个表达式,它将匹配所有文本不包括以前缀'abc'后缀'def'的文本(只有前缀后缀的文本是可以的)。

我已经尝试了以下内容:^(?!([a][b][c]])).*(?!([d][e][f])$),但它不能匹配只具有这些条件之一的文本(例如,abc.xxx失败,以及xxx.pdf,尽管它们应该通过)。

我知道答案与“向后查找”有关,但我仍然不太确定如何实现这种行为。

我还尝试了以下内容:^(?<!([a][b][c])).*(?!([d][e][f])$),但同样没有成功。


你使用的是哪种方言? - Robin Gertenbach
2
^(?!abc.*def$).* - Sebastian Proske
@SebastianProske 谢谢... 结果是我想得太复杂了! - Nissim
@SebastianProske 这个表达式似乎不起作用:http://regexr.com/3dvco - strah
@strah 我不觉得有问题,因为它匹配成功了,因为后缀不存在。 - Sebastian Proske
2个回答

3

^((abc.*\.(?!def))|((?!abc).*\.def))$

我认为可能有更简单的解决方案,但这个方案可以按照您的要求工作。

[a][b][c] 可以简化为 abc,同样适用于 def。 该模式的第一部分匹配不以 def 结尾的 abc.*\.。 第二部分匹配没有前缀 abc.*\.def

下面是该模式的可视化表示:

Regular expression visualization

Debuggex Demo


2
保持简单,将其合并为一个前瞻,以检查两个条件:
^(?!abc.*def$).*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接