正则表达式 - 匹配整个字符串,除非 [重复]

Posted

技术标签:

【中文标题】正则表达式 - 匹配整个字符串,除非 [重复]【英文标题】:Regex - Match Entire String Unless [duplicate] 【发布时间】:2011-10-18 15:12:22 【问题描述】:

我需要编写一个正则表达式,它将匹配字符串中的所有内容,除非其中包含某个单词。以这个字符串为例:

http://12.34.567.890/sqlbuddy

匹配一切的表达式是:

^.*$

...如果它包含单词“sqlbuddy”,则需要对其进行修改,使其完全匹配字符串。我认为负前瞻可以做到这一点,但这对我不起作用。

比如我试过这个,不行:

^(?!sqlbuddy).*$

我应该如何修改这个?

【问题讨论】:

【参考方案1】:

...同样(对于其他人),如果您只想在 [long] 字符串(具有多个匹配项的长文本)的特定位置进行搜索,您可以使用:

first_part_of_string(?!.*sqlbuddy.*)second_part_of_string

或者,更宽容:

first_part_of_string.*(?!.*sqlbuddy.*).*second_part_of_string

【讨论】:

【参考方案2】:

该示例不起作用,因为它假定sqlbuddy 位于字符串的开头。您需要将其更改为以下内容,以便sqlbuddy 可以出现在字符串中的任何位置:

^(?!.*sqlbuddy.*).*$ 

但是,如果您真的只是想检查您的字符串是否包含给定的单词,那么"http://12.34.567.890/sqlbuddy".contains("sqlbuddy") 就足够了。

【讨论】:

谢谢。我将它与 mod_rewrite 一起使用,所以我不能使用 .contains(),但它可以工作,下面的其他答案也是如此。但是,由于某种原因,它与使用gskinner.com/RegExr的正则表达式测试器不匹配 @Allen,看看 rubular,这是我用于正则表达式测试的工具,我非常喜欢它。 +1 但稍作调整:在sqlbuddy 之后不需要.*。这已经足够了:(?m)^(?!.*?sqlbuddy).*$(?m)^(?!.*sqlbuddy).*$ 取决于你是想偷懒还是回溯。【参考方案3】:

另外,这对我有用:字符串 'sqlbuddy' 的位置无关紧要。

^((?!sqlbuddy).)*$

【讨论】:

以上是关于正则表达式 - 匹配整个字符串,除非 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式整个单词[重复]

在javascript匹配中获取正则表达式的单独部分[重复]

MySQL中的正则表达式

正则表达式匹配所有字符实例,除非后跟数字或单独

用于否定字符类的 C# 正则表达式,除非字符彼此相邻

正则表达式匹配信用卡号,除非它们出现在 UUID 中