显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
在你的情况下,对几个匹配的结果做AND是不是不可能?在伪代码
regexp_match(pattern1, data) && regexp_match(pattern2, data) && ...
其他回答
顺序总是隐含在正则表达式的结构中。为了实现您想要的结果,您必须针对不同的表达式多次匹配输入字符串。
您想要做的事情是无法通过单个regexp实现的。
看看这个例子:
我们有两个正则表达式A和B,我们想要匹配它们,所以在伪代码中它看起来像这样:
pattern = "/A AND B/"
它可以在不使用AND操作符的情况下写成这样:
pattern = "/NOT (NOT A OR NOT B)/"
PCRE:
"/(^(^A|^B))/"
regexp_match(pattern,data)
在正则表达式之外使用AND。在PHP中,提前操作符似乎不适合我,相反,我使用了这个
if( preg_match("/^.{3,}$/",$pass1) && !preg_match("/\s{1}/",$pass1))
return true;
else
return false;
如果密码长度为3个字符或更多,并且密码中没有空格,则上述正则表达式将匹配。
((是的)。* (no)) |((不)。*(是的)
将匹配同时有yes和no的句子,不管它们出现的顺序:
我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。
**不**,你不能拿我的手机。是的,你可以自己去。
将两者都匹配,忽略大小写。
为什么不用awk呢? 用awk regex AND, OR的问题是如此简单
awk '/WORD1/ && /WORD2/ && /WORD3/' myfile