显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
您可以将输出输送到另一个正则表达式。使用grep,你可以这样做:
grep A |
其他回答
你可以用正则表达式来做,但你可能会想用其他的表达式。例如,使用几个regexp并将它们组合在一个if子句中。
你可以用一个标准的regexp枚举所有可能的排列,像这样(以任意顺序匹配a, b和c):
(abc)|(bca)|(acb)|(bac)|(cab)|(cba)
但是,如果有多个项,这会使regexp变得非常长,而且可能效率很低。
如果您使用的是一些扩展的regexp版本,比如Perl或Java的,它们有更好的方法来实现这一点。其他答案建议使用正前向运算。
您可以将输出输送到另一个正则表达式。使用grep,你可以这样做:
grep A |
如果你使用Perl正则表达式,你可以使用正向预测:
例如
(?=[1-9][0-9]{2})[0-9]*[05]\b
是否有大于100且能被5整除的数
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)/;
((是的)。* (no)) |((不)。*(是的)
将匹配同时有yes和no的句子,不管它们出现的顺序:
我喜欢饼干吗?**是的**,我喜欢。但是牛奶——**不**,绝对不行。
**不**,你不能拿我的手机。是的,你可以自己去。
将两者都匹配,忽略大小写。