显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
((是的)。* (no)) |((不)。*(是的)
将匹配同时有yes和no的句子,不管它们出现的顺序:
我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。
**不**,你不能拿我的手机。是的,你可以自己去。
将两者都匹配,忽略大小写。
其他回答
在你的情况下,对几个匹配的结果做AND是不是不可能?在伪代码
regexp_match(pattern1, data) && regexp_match(pattern2, data) && ...
((是的)。* (no)) |((不)。*(是的)
将匹配同时有yes和no的句子,不管它们出现的顺序:
我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。
**不**,你不能拿我的手机。是的,你可以自己去。
将两者都匹配,忽略大小写。
下面是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。在PHP中,提前操作符似乎不适合我,相反,我使用了这个
if( preg_match("/^.{3,}$/",$pass1) && !preg_match("/\s{1}/",$pass1))
return true;
else
return false;
如果密码长度为3个字符或更多,并且密码中没有空格,则上述正则表达式将匹配。
使用非消耗正则表达式。
典型的(例如Perl/Java)表示法是:
(? = expr)
这意味着“匹配expr,但之后继续在原始匹配点进行匹配。”
你想做多少就做多少,这将是一个“并且”。例子:
(?=匹配这个表达式)(?=也配这个)(?=哦,还有这个)
如果需要保存其中的一些数据,甚至可以在非消费表达式中添加捕获组。