显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
在正则表达式之外使用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并将它们组合在一个if子句中。
你可以用一个标准的regexp枚举所有可能的排列,像这样(以任意顺序匹配a, b和c):
(abc)|(bca)|(acb)|(bac)|(cab)|(cba)
但是,如果有多个项,这会使regexp变得非常长,而且可能效率很低。
如果您使用的是一些扩展的regexp版本,比如Perl或Java的,它们有更好的方法来实现这一点。其他答案建议使用正前向运算。
为什么不用awk呢? 用awk regex AND, OR的问题是如此简单
awk '/WORD1/ && /WORD2/ && /WORD3/' myfile
使用非消耗正则表达式。
典型的(例如Perl/Java)表示法是:
(? = expr)
这意味着“匹配expr,但之后继续在原始匹配点进行匹配。”
你想做多少就做多少,这将是一个“并且”。例子:
(?=匹配这个表达式)(?=也配这个)(?=哦,还有这个)
如果需要保存其中的一些数据,甚至可以在非消费表达式中添加捕获组。
如果你使用Perl正则表达式,你可以使用正向预测:
例如
(?=[1-9][0-9]{2})[0-9]*[05]\b
是否有大于100且能被5整除的数