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

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


当前回答

下面是and运算符的可能“形式”:

以下面的正则表达式为例:

如果我们想匹配没有“e”字符的单词,我们可以这样做:

/\b[^\We]+\b/g

\W表示不是“单词”字符。 ^\W表示“字”字符。 [^\We]表示“单词”字符,而不是“e”。

看一下实际情况:没有e的单词

和“正则表达式的运算符”

我认为这个模式可以用作正则表达式的“和”操作符。

一般而言,如果:

A = not A B =非B

然后:

[^AB] = not(A or B) 
      = not(A) and not(B) 
      = a and b

差集

所以,如果我们想在正则表达式中实现差分集的概念,我们可以这样做:

a - b = a and not(b)
      = a and B
      = [^Ab]

其他回答

下面是and运算符的可能“形式”:

以下面的正则表达式为例:

如果我们想匹配没有“e”字符的单词,我们可以这样做:

/\b[^\We]+\b/g

\W表示不是“单词”字符。 ^\W表示“字”字符。 [^\We]表示“单词”字符,而不是“e”。

看一下实际情况:没有e的单词

和“正则表达式的运算符”

我认为这个模式可以用作正则表达式的“和”操作符。

一般而言,如果:

A = not A B =非B

然后:

[^AB] = not(A or B) 
      = not(A) and not(B) 
      = a and b

差集

所以,如果我们想在正则表达式中实现差分集的概念,我们可以这样做:

a - b = a and not(b)
      = a and B
      = [^Ab]

使用非消耗正则表达式。

典型的(例如Perl/Java)表示法是:

(? = expr)

这意味着“匹配expr,但之后继续在原始匹配点进行匹配。”

你想做多少就做多少,这将是一个“并且”。例子:

(?=匹配这个表达式)(?=也配这个)(?=哦,还有这个)

如果需要保存其中的一些数据,甚至可以在非消费表达式中添加捕获组。

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

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

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

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

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

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)/;