我正在尝试创建一个匹配任何字符串的正则表达式,包括那些包含"hello"
但不包含"hello"
的字符串。
例如:
"hello1" - matches
"say hello" - matches
"hello there" - matches
"goodbye" - matches
"hello" - doesn't match
以下表达式将匹配不包含"hello"
的所有内容,但我无法提出符合要求的表达式。
^((?!hello).)*$
不幸的是,他们无法与此相关的额外逻辑。我正在寻找一个与上述字符串匹配的表达式。
谢谢!
答案 0 :(得分:0)
^(?:((?!hello).)*|.+hello.*|.*hello.+)$
使用原始正则表达式并添加替代方法(|
):
.+hello.*
- 在hello
.*hello.+
- hello
<小时/> 另一种解决方案是只检查先行本身中字符串结尾的存在:
^(?!hello$).*$
答案 1 :(得分:0)
对于它的价值,首先检查可能更有效,因为简单的字符串匹配相当快。在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)) { }
现在,如果你想考虑空间,或者只是重复这个词,那就是另一个故事了。
答案 2 :(得分:0)
我认为来自ndn's的(.+hello.*|.*hello.+)
就足够了。