正则表达式 - 匹配整个字符串,除非 [重复]
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).)*$
【讨论】:
以上是关于正则表达式 - 匹配整个字符串,除非 [重复]的主要内容,如果未能解决你的问题,请参考以下文章