繁体   English   中英

如何使用正则表达式匹配不在另一个字符串中出现的字符串?

[英]How can I match occurrences of string not in another string using regular expressions?

我正在尝试按照以下顺序匹配“字符串”的所有出现, @@内部的除外

as87dio u8u u7o @string@ ou os8 string os u

即第二次出现应匹配,但第一次不匹配

谁能给我解决方案?

您可以使用负数前瞻和后瞻

(?<!@)string(?!@)

编辑

注意:根据下面的Marks注释,这与@stringstring@不匹配。

你可以试试:

(?:[^@])string(?:[^@])

好,

如果不想与某个字符匹配,可以将其放在字符类(方括号)中,并以^字符将其取反,例如[^a]表示除小写字母'a'以外的任何字符。

因此,如果您想要“非标志”,然后是字符串,然后是另一个“非标志”,则需要

[^@]string[^@]

现在,问题在于字符类将各自匹配一个字符,因此在您的示例中,我们将获得“ string”,其中包括前导和尾随空格。 因此,还有另一种结构告诉您什么都不匹配,并且在开始时用?进行了限制。 (?: ) 因此,您将其围绕在两端。

(?:[^@])string(?:[^@])

可以,但是现在它在字符串的开头(令人困惑的是, ^字符在字符类之外执行双重任务)或在字符串$的末尾不匹配。 所以我们必须使用OR字符| 说“给我一个字符串的非符号或结尾”,最后说“给我一个字符串的非符号或结尾”,如下所示:

(?:[^@]|^)string(?:[^@]|$)

编辑:负向后和前向超前是一种更简单(且更聪明)的解决方案,但不适用于所有正则表达式引擎。

现在是一个后续问题。 如果您有“涩味”一词,您是否仍要匹配其中的“字符串”? 换句话说,“字符串”是否必须本身就是一个词? (尽管我最初的反应是,这可能变得相当复杂:))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM