显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?

具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。


当前回答

AND运算符在RegExp语法中是隐式的。 相反,必须使用管道指定OR操作符。 下面的RegExp:

var re = /ab/;

意思是字母a和字母b。 它还适用于组:

var re = /(co)(de)/;

它的意思是基团co和基团de。 将(隐式的)AND替换为OR需要以下几行代码:

var re = /a|b/;
var re = /(co)|(de)/;

其他回答

在正则表达式之外使用AND。在PHP中,提前操作符似乎不适合我,相反,我使用了这个

if( preg_match("/^.{3,}$/",$pass1) && !preg_match("/\s{1}/",$pass1))
    return true;
else
    return false;

如果密码长度为3个字符或更多,并且密码中没有空格,则上述正则表达式将匹配。

看看这个例子:

我们有两个正则表达式A和B,我们想要匹配它们,所以在伪代码中它看起来像这样:

pattern = "/A AND B/"

它可以在不使用AND操作符的情况下写成这样:

pattern = "/NOT (NOT A OR NOT B)/"

PCRE:

"/(^(^A|^B))/"

regexp_match(pattern,data)

顺序总是隐含在正则表达式的结构中。为了实现您想要的结果,您必须针对不同的表达式多次匹配输入字符串。

您想要做的事情是无法通过单个regexp实现的。

在你的情况下,对几个匹配的结果做AND是不是不可能?在伪代码

regexp_match(pattern1, data) && regexp_match(pattern2, data) && ...

如果你使用Perl正则表达式,你可以使用正向预测:

例如

(?=[1-9][0-9]{2})[0-9]*[05]\b

是否有大于100且能被5整除的数