【发布时间】:2015-04-15 22:18:16
【问题描述】:
我有一个带有换行符的文本,我需要检查它是否有一些单词,但没有另一个。
例如:
Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。
如果文本有单词“lorem”和“ipsum”,无论在哪一行,那么测试应该失败。如果文本包含“lorem”但在任何一行都没有“ipsum”,那么它应该成功。
我可能会做一些解决方法,并使用条件、explode 和 strpos 函数进行测试。但我想使用正则表达式规则作为预定义的预设,这样我就可以轻松扩展功能。
【问题讨论】:
-
试过类似
if(!preg_match("/(lorem.*?ipsum|ipsum.*?lorem)/is", $str)) { /* code */ }? -
单词边界,区分大小写如何?如果您对
ipsum存在而lorem不存在时的字符串匹配感到满意,我会选择^(?si)(?!.*\blorem\b.*\bipsum\b|\bipsum\b.*\blorem\b.*$).*$。见regex101.com/r/lB5qX5/1。 -
@WarGasm 您似乎在评论几乎所有不起作用的东西,而不是唯一真正按照您的要求做的事情。总帐。
-
那么您是说
lorem是必需的吗?因为当我阅读您的问题时,我看到的是if it contains lorem, it can't contain ipsum,而不是it must contain lorem, but not ipsum。对我说“如果文本有……”意味着它是可选的,不是必需的。如果需要,则可以使用像这样的简单模式:/(?=.*lorem)(?!.*ipsum).*/is,这意味着must have lorem, can't have ipsum。也添加所有边界的东西。它已经是多行的。 Demo -
您接受了一个与您的问题要求的没有 lorem 的句子匹配的答案,实际上,接受的答案匹配:“无”和“绝对没有”,这真的很难过(对你来说)。跨度>
标签: php regex preg-match