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

时间:2016-08-08 08:36:52

标签: regex regex-negation regex-lookarounds

我正在尝试构建一个表达式,该表达式将所有文字 EXCLUDING 文字与前缀my ($stdout,$stderr,$exit) = $ssh->cmd($cmd1); ... ($stdout,$stderr,$exit) = $ssh->cmd($cmd2); ... ($stdout,$stderr,$exit) = $ssh->cmd($cmd3); ... sleep(30); ($stdout,$stderr,$exit) = $ssh->cmd($cmd5); ... ($stdout,$stderr,$exit) = $ssh->cmd($cmd6); ... AND 后缀'abc'匹配(仅限文字)前缀 OR ,后缀可以。)

我尝试过以下方法: 'def',但它不匹配只有一个标准的文本(即abc.xxx失败,以及xxx.pdf,尽管它们应该通过)

我理解答案与'看后面'有关但我仍然不太确定如何实现这种行为

我也尝试过以下方法: ^(?!([a][b][c]])).*(?!([d][e][f])$),但又一次,没有运气

2 个答案:

答案 0 :(得分:3)

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

我认为可以有一个更简单的解决方案,但是这个解决方案可以按照您的需要运行。

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

以下是模式的直观表示:

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

保持简单,并将其组合成一个预测,以检查两种情况:

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