短语可以包含两个单词(或者没有单词),并以分号结尾

时间:2014-06-12 16:47:39

标签: regex match

我一直在谷歌上寻找一点,并且无法找到这种特殊的正则表达式。我认为这不是一件小事。

逻辑表达式是这样的:

( (contains #HOUR# AND contains #DATE#)
  OR (not contains #HOUR# and not contains #DATE#) )
AND (ends in semicolon)

相关短语应始终以;结尾,但短语中的任何位置都可以包含任意数量的标点符号。

它还可以包含两个保留字(用#分隔或任何特殊字符,例如:#HOUR##DATE#),或者不包含。这意味着如果有一个单词,则另一个单词也应按任何顺序出现在短语中。

例如:

asdasdadadasd           -> shouldn't work
asdasdasdaasdasdasda;   -> should work
sdasdadas#DATE#-#HOUR#; -> should work
DATE-HOUR;              -> should work
sdasdadas#HOUR##DATE#;  -> should work
sdasdadas#DATE;         -> should work

这就是我已经离开^(^.+?\;$)|((?=.*\b#HOUR#\b)(?=.*\b#DATE#\b)).*

但这种表达方式并不起作用。

1 个答案:

答案 0 :(得分:3)

您可以使用(参见demo here):

^(?:(?=.*#HOUR#)(?=.*#DATE#)|(?!.*#HOUR#)(?!.*#DATE#)).*;$

<强>解释

^(?: (?= .*#HOUR# ) (?= .*#DATE# )   # either contains both '#HOUR#' and '#DATE#'
  |  (?! .*#HOUR# ) (?! .*#DATE# ) ) # or neither of them
.*;$                                 # match everything until the ending ';'