正则表达式前瞻或后瞻性表达

时间:2014-05-22 10:19:16

标签: .net regex regex-lookarounds

如果是字符串,我必须在单个正则表达式中检查

  1. 包含substring-1
  2. 不包含substring-2
  3. 无论两个子串的位置如何。

    1. substring-2 bla bla bla substring-1 ”:不匹配
    2. substring-1 bla bla bla substring-2 ”:不匹配
    3. substring-2 bla bla bla substring-1 bla bla substring-2 ”:不匹配
    4. “bla bla bla substring-1 bla bla”:MATCH
    5. 我一直在尝试使用lookaorund表达式,但无法检查substring-2是否在substring-1之后或之前。

      (?<!substring-2.*)(?!.*substring-2)substring-1
      

      如果substring-2不在substring-1之前和之后,则此表达式适合我的情况。因此,如果在正则表达式之前和之后出现substring-2,那么只有在之后或之前出现才会起作用。

      如何将其转换为OR条件,以便将lookaorund表达式合并为OR?

      注意:输入字符串将是多行的,因此它可以包含换行符。

      注意:正则表达式必须是.NET兼容的

3 个答案:

答案 0 :(得分:3)

您可以在字符串的开头执行检查,然后将substring-1存储在第一个捕获组中:

(?s)^(?!.*substring-2).*(substring-1)

(?s)只是打开dot matches all(甚至换行)标志的内联方式。

答案 1 :(得分:2)

您只能使用一个否定前瞻 - demo

^(?!.*substring-2).*substring-1

答案 2 :(得分:1)

实现这一目标的一般方法是连接&#34;规则&#34;与前瞻:

^(?=.*substring-1)(?!.*substring-2)

如果您希望substring-3失败。然后添加另一个前瞻:

^(?=.*substring-1)(?!.*substring-2)(?!.*substring-3)

请勿忘记s修饰符,以便将换行符与点匹配。