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

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


当前回答

使用非消耗正则表达式。

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

(? = expr)

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

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

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

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

其他回答

您可以将输出输送到另一个正则表达式。使用grep,你可以这样做:

grep A |

如果你使用Perl正则表达式,你可以使用正向预测:

例如

(?=[1-9][0-9]{2})[0-9]*[05]\b

是否有大于100且能被5整除的数

使用非消耗正则表达式。

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

(? = expr)

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

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

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

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

看看这个例子:

我们有两个正则表达式A和B,我们想要匹配它们,所以在伪代码中它看起来像这样:

pattern = "/A AND B/"

它可以在不使用AND操作符的情况下写成这样:

pattern = "/NOT (NOT A OR NOT B)/"

PCRE:

"/(^(^A|^B))/"

regexp_match(pattern,data)

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

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