Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-匹配整个字符串,除非_Regex - Fatal编程技术网

Regex 正则表达式-匹配整个字符串,除非

Regex 正则表达式-匹配整个字符串,除非,regex,Regex,我需要编写一个正则表达式,它将匹配字符串中的所有内容,除非其中包含某个单词。以这个字符串为例: http://12.34.567.890/sqlbuddy 匹配所有内容的表达式为: ^.*$ …需要对其进行修改,以便它在包含单词“sqlbuddy”时与字符串完全不匹配。我原以为负面展望可以做到,但这对我不起作用 例如,我尝试了这个,但不起作用: ^(?!sqlbuddy).*$ 我应该如何修改它?此外,这对我来说很有效:字符串“sqlbuddy”的位置无关紧要 ^((?!sqlbuddy)

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

http://12.34.567.890/sqlbuddy
匹配所有内容的表达式为:

^.*$
…需要对其进行修改,以便它在包含单词“sqlbuddy”时与字符串完全不匹配。我原以为负面展望可以做到,但这对我不起作用

例如,我尝试了这个,但不起作用:

^(?!sqlbuddy).*$

我应该如何修改它?

此外,这对我来说很有效:字符串“sqlbuddy”的位置无关紧要


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

^(?!.*sqlbuddy.*).*$ 
但是,如果您真的只想检查字符串是否包含给定的单词,那么可能需要一个
“http://12.34.567.890/sqlbuddy“.contains(“sqlbuddy”)
就足够了。

…另外(对于其他人),如果您只想在[long]字符串的特定位置搜索(包含多个匹配项的长文本),您可以使用:

first_part_of_string(?!.*sqlbuddy.*)second_part_of_string
或者,更为宽容:

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

非常感谢。我将它与mod_rewrite一起使用,因此无法使用.contains(),但它可以工作,下面的另一个答案也是如此。然而,由于某些原因,它与使用@Allen的正则表达式测试仪不匹配,请查看rubular,这是我在正则表达式测试中使用的,我非常喜欢它。+1但有一点小小的调整:您不需要
*
之后的
sqlbuddy
。这就足够了:
(?m)^(?。*?sqlbuddy)。*$
(?m)^(?!sqlbuddy)。*$
这取决于您是想变懒还是想回溯。