为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式:有AND操作符吗?

正则表达式:有AND操作符吗?

千巷猫影 2019-06-01 14:23:00
正则表达式:有AND操作符吗?显然,您可以使用|(烟斗?)代表OR,但是有没有一种方法来代表AND也是?具体来说,我想匹配包含所有特定短语的文本段落,但不按特定顺序排列。
查看完整描述

4 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

使用不使用的正则表达式。

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

(?=费用)

意思是“匹配”费用但在此之后,继续在原来的匹配点进行匹配。“

你可以做很多你想做的,这将是一个“和”。例子:

(?=match this expression)(?=match this too)(?=oh, and this)

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


查看完整回答
反对 回复 2019-06-01
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您需要像其他响应者所说的那样使用查找,但是查找必须考虑目标单词与当前匹配位置之间的其他字符。例如:

(?=.*word1)(?=.*word2)(?=.*word3)

这个.*在第一个查找中,它可以在获得“word 1”之前匹配它需要的字符数。然后,重新设置匹配位置,第二次向前查找“Word2”。再次重置,最后部分与“word 3”匹配;因为它是您要检查的最后一个单词,所以没有必要让它处于前瞻性,但它并不会造成伤害。

为了匹配整个段落,您需要将正则表达式锚定在两端,并添加一个最终结果。.*若要使用其余字符,请执行以下操作。使用Perl样式的表示法是:

/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m

“m”修饰符用于多行模式;它允许^$在段落边界处匹配(在regex语言中为“线边界”)。在这种情况下你必须使用‘s’修饰符,它允许点元字符匹配换行符以及所有其他字符。

最后,您希望确保您匹配的是整个单词,而不仅仅是较长单词的片段,因此您需要添加单词边界:

/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m


查看完整回答
反对 回复 2019-06-01
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

看看这个例子:

我们有两个regexps A和B,我们希望匹配它们,所以在伪代码中如下所示:

pattern = "/A AND B/"

不需要像这样使用and操作符就可以编写它:

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

在PCRE中:

"/^(^A|^B)/"regexp_match(pattern,data)


查看完整回答
反对 回复 2019-06-01
?
达令说

TA贡献1821条经验 获得超6个赞

您可以使用正则表达式来实现这一点,但是您可能还需要其他的表达式。例如,使用几个regexp并将它们合并到一个if子句中。

您可以使用标准regexp枚举所有可能的排列,如下所示(按任何顺序匹配a、b和c):

(abc)|(bca)|(acb)|(bac)|(cab)|(cba)

但是,如果您有两个以上的术语,这就会产生一个非常长的、可能效率很低的regexp。

如果您使用的是一些扩展的regexp版本,比如Perl或Java版本,那么它们有更好的方法来做到这一点。其他答案建议采取积极的前瞻性行动。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 4353 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信