正则表达式匹配包含单词但本身不包含单词的字符串
Regex Match String Containing Word but not Word on its own
我正在尝试创建一个正则表达式来匹配任何字符串,包括包含 "hello"
的字符串,但不匹配 "hello"
本身。
例如:
"hello1" - matches
"say hello" - matches
"hello there" - matches
"goodbye" - matches
"hello" - doesn't match
以下表达式将匹配所有不包含 "hello"
的内容,但我想不出符合要求的表达式。
^((?!hello).)*$
不幸的是,它们不能是与此相关的额外逻辑。我正在寻找与上述字符串匹配的单个表达式。
谢谢!
^(?:((?!hello).)*|.+hello.*|.*hello.+)$
采用您的原始正则表达式并添加替代项 (|
) 至:
.+hello.*
- 在 hello
出现之前至少有一个字符
.*hello.+
- 在 hello
出现后至少有一个字符
另一种解决方案是仅检查前瞻本身中字符串结尾的存在:
^(?!hello$).*$
就其价值而言,先检查可能更高效,因为简单的字符串匹配相当快。在 PHP:
if($string != 'hello' && preg_match('/hello/', $string)) {
// String contains hello, but is not only hello
}
或者你甚至不必看,如果字符串是你要查找的单词的长度,因为如果它匹配,它只会是那个单词:
if(strlen($string) > 5 && preg_match('/hello/i', $string)) { }
现在,如果你想考虑空格,或者只是重复那个词,那就是另一回事了。
我认为 中的 (.+hello.*|.*hello.+)
就足够了。
我正在尝试创建一个正则表达式来匹配任何字符串,包括包含 "hello"
的字符串,但不匹配 "hello"
本身。
例如:
"hello1" - matches
"say hello" - matches
"hello there" - matches
"goodbye" - matches
"hello" - doesn't match
以下表达式将匹配所有不包含 "hello"
的内容,但我想不出符合要求的表达式。
^((?!hello).)*$
不幸的是,它们不能是与此相关的额外逻辑。我正在寻找与上述字符串匹配的单个表达式。
谢谢!
^(?:((?!hello).)*|.+hello.*|.*hello.+)$
采用您的原始正则表达式并添加替代项 (|
) 至:
.+hello.*
- 在hello
出现之前至少有一个字符
.*hello.+
- 在hello
出现后至少有一个字符
另一种解决方案是仅检查前瞻本身中字符串结尾的存在:
^(?!hello$).*$
就其价值而言,先检查可能更高效,因为简单的字符串匹配相当快。在 PHP:
if($string != 'hello' && preg_match('/hello/', $string)) {
// String contains hello, but is not only hello
}
或者你甚至不必看,如果字符串是你要查找的单词的长度,因为如果它匹配,它只会是那个单词:
if(strlen($string) > 5 && preg_match('/hello/i', $string)) { }
现在,如果你想考虑空格,或者只是重复那个词,那就是另一回事了。
我认为 (.+hello.*|.*hello.+)
就足够了。