【问题标题】:Regex if then not正则表达式如果然后不是
【发布时间】:2013-09-10 16:14:16
【问题描述】:

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

  • 如果字符串包含“Hello”或“Goodbye”
  • 字符串不能包含“World”或“MyLove”
  • 其他
  • 字符串必须包含“World”或“MyLove”

我尝试了多次实施但没有成功。这是最后一个:

(?(?=(\bHello\b|\bGoodbye\b)(?!World|MyLove)(World|MyLove)))

一些预期结果的例子:

  • 你好,你好吗?错误
  • 再见,亲爱的!是的
  • 很高兴认识你!错误
  • 很高兴认识你 MyLove !是的

提前感谢您的帮助。

拉斐尔

【问题讨论】:

  • 不要尝试在复杂的情况下使用单个正则表达式,否则您最终会被拉扯头发或被某些高级代表自以为是的 SO 用户侮辱:-)

标签: regex if-statement conditional


【解决方案1】:

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

(?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/;

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 2011-02-07
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多