Regex 正则表达式,如果不是

Regex 正则表达式,如果不是,regex,if-statement,conditional,Regex,If Statement,Conditional,我尝试实现一个应验证以下规则的正则表达式: 如果字符串包含“Hello”或“再见” 字符串不能包含“World”或“MyLove” 否则 字符串必须包含“World”或“MyLove” 我尝试了几次实施,但都没有成功。这是最后一个: (?(?=(\bHello\b|\bGoodbye\b)(?!World|MyLove)(World|MyLove))) 预期结果的一些示例: 你好,你好吗,我的爱?假的 再见,亲爱的!真的 很高兴认识你!假的 很高兴认识你,我的爱人!真的 提前感谢您的帮

我尝试实现一个应验证以下规则的正则表达式:

  • 如果字符串包含“Hello”或“再见”
  • 字符串不能包含“World”或“MyLove”
  • 否则
  • 字符串必须包含“World”或“MyLove”
我尝试了几次实施,但都没有成功。这是最后一个:

(?(?=(\bHello\b|\bGoodbye\b)(?!World|MyLove)(World|MyLove)))
预期结果的一些示例:

  • 你好,你好吗,我的爱?假的
  • 再见,亲爱的!真的
  • 很高兴认识你!假的
  • 很高兴认识你,我的爱人!真的
提前感谢您的帮助


Raphaël

根据您的正则表达式口味,您可以使用以下内容:

(?x)                               # allow whitespace and comments
^                                  # anchor at start of string
(?(?= .* \b(Hello|Goodbye)\b )     # if
  (?! .* \b(World|MyLove)\b )      # then
| (?= .* \b(World|MyLove)\b )      # else
)
但直接用你的语言可能会写得更清楚。例如,在Perl中:

/\b(Hello|Goodbye)\b/ ?
!/\b(World|MyLove)\b/ :
/\b(World|MyLove)\b/;

不要试图在复杂的情况下使用单一的正则表达式,否则你会被某些高代表性的固执己见的用户侮辱:-)