【问题标题】:Regex expression to exclude both prefix and suffix正则表达式排除前缀和后缀
【发布时间】:2016-08-08 08:36:51
【问题描述】:

我正在尝试构建一个表达式,它将匹配所有文本 EXCLUDING 带有前缀 'abc' AND 后缀 'def' 的文本(文本只有前缀 OR 后缀没问题)。

我尝试了以下方法: ^(?!([a][b][c]])).*(?!([d][e][f])$),但它不匹配只有一个条件的文本(即 abc.xxx 失败,以及 xxx.pdf,尽管它们应该通过)

我知道答案与“向后看”有关,但我仍然不太确定如何实现此行为

我还尝试了以下方法: ^(?<!([a][b][c])).*(?!([d][e][f])$),但同样没有运气

【问题讨论】:

  • 你用的是哪种方言?
  • ^(?!abc.*def$).*
  • @SebastianProske 谢谢...原来我把事情复杂化了!
  • @SebastianProske 这个表达式似乎不起作用:regexr.com/3dvco
  • @strah 我没有看到问题,它匹配因为后缀不存在。

标签: regex regex-negation regex-lookarounds


【解决方案1】:

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

我认为可以有一个更简单的解决方案,但这个解决方案会按照您的意愿工作。

[a][b][c] 可以简化为abcdef 也是如此。 模式的第一部分匹配abc.*\.,最后没有def。 第二部分匹配.*\.def,不带前缀abc

这是模式的可视化表示:

Debuggex Demo

【讨论】:

    【解决方案2】:

    保持简单并将其组合成一个前瞻来检查两个条件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多