显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
((是的)。* (no)) |((不)。*(是的)
将匹配同时有yes和no的句子,不管它们出现的顺序:
我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。
**不**,你不能拿我的手机。是的,你可以自己去。
将两者都匹配,忽略大小写。
其他回答
如果你使用Perl正则表达式,你可以使用正向预测:
例如
(?=[1-9][0-9]{2})[0-9]*[05]\b
是否有大于100且能被5整除的数
顺序总是隐含在正则表达式的结构中。为了实现您想要的结果,您必须针对不同的表达式多次匹配输入字符串。
您想要做的事情是无法通过单个regexp实现的。
除了接受的答案
我将提供一些实际的例子,让你们中的一些人更清楚地了解事情。例如,我们有这三行文本:
[12/Oct/2015:00:37:29 +0200] // only this + will get selected
[12/Oct/2015:00:37:x9 +0200]
[12/Oct/2015:00:37:29 +020x]
点击这里查看demo
这里我们要做的是选择+号,但只有在两个数字后面加空格和四个数字之前。这些是唯一的约束条件。我们将使用这个正则表达式来实现它:
'~(?<=\d{2} )\+(?=\d{4})~g'
注意,如果将表达式分开,将会得到不同的结果。
或者你想在标签之间选择一些文本…但不是标签!然后你可以用:
'~(?<=<p>).*?(?=<\/p>)~g'
对于本文:
<p>Hello !</p> <p>I wont select tags! Only text with in</p>
点击这里查看demo
在正则表达式之外使用AND。在PHP中,提前操作符似乎不适合我,相反,我使用了这个
if( preg_match("/^.{3,}$/",$pass1) && !preg_match("/\s{1}/",$pass1))
return true;
else
return false;
如果密码长度为3个字符或更多,并且密码中没有空格,则上述正则表达式将匹配。
为什么不用awk呢? 用awk regex AND, OR的问题是如此简单
awk '/WORD1/ && /WORD2/ && /WORD3/' myfile