显然,您可以使用|(管道?)来表示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]

其他回答

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

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

((是的)。* (no)) |((不)。*(是的)

将匹配同时有yes和no的句子,不管它们出现的顺序:

我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。

**不**,你不能拿我的手机。是的,你可以自己去。

将两者都匹配,忽略大小写。

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

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

为什么不用awk呢? 用awk regex AND, OR的问题是如此简单

awk '/WORD1/ && /WORD2/ && /WORD3/' myfile

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

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

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