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

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

显然,您可以使用|(烟斗?)代表OR,但是有没有一种方法来代表AND也是?

具体来说,我想匹配包含所有特定短语的文本段落,但不按特定顺序排列。


千巷猫影
浏览 4307回答 4
4回答

杨魅力

使用不使用的正则表达式。典型的(即Perl/Java)表示法是:(?=费用)意思是“匹配”费用但在此之后,继续在原来的匹配点进行匹配。“你可以做很多你想做的,这将是一个“和”。例子:(?=match this expression)(?=match this too)(?=oh, and this)如果需要保存其中的一些数据,甚至可以在非消费表达式中添加捕获组。

元芳怎么了

您需要像其他响应者所说的那样使用查找,但是查找必须考虑目标单词与当前匹配位置之间的其他字符。例如:(?=.*word1)(?=.*word2)(?=.*word3)这个.*在第一个查找中,它可以在获得“word 1”之前匹配它需要的字符数。然后,重新设置匹配位置,第二次向前查找“Word2”。再次重置,最后部分与“word 3”匹配;因为它是您要检查的最后一个单词,所以没有必要让它处于前瞻性,但它并不会造成伤害。为了匹配整个段落,您需要将正则表达式锚定在两端,并添加一个最终结果。.*若要使用其余字符,请执行以下操作。使用Perl样式的表示法是:/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m“m”修饰符用于多行模式;它允许^和$在段落边界处匹配(在regex语言中为“线边界”)。在这种情况下你必须不使用‘s’修饰符,它允许点元字符匹配换行符以及所有其他字符。最后,您希望确保您匹配的是整个单词,而不仅仅是较长单词的片段,因此您需要添加单词边界:/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m

慕码人8056858

看看这个例子:我们有两个regexps 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版本,那么它们有更好的方法来做到这一点。其他答案建议采取积极的前瞻性行动。
打开App,查看更多内容
随时随地看视频慕课网APP