Java 正则表达式否定整个词?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23724661/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Regex to negate the whole word?
提问by user3198603
String test1 = "This is my test string";
I want to match a string which does not contain "test"
我想匹配一个不包含“test”的字符串
I can do it with
我可以做到
Pattern p = Pattern.compile(".*?^(test).*?")
and it works but at most of sites like Regular Expressions and negating a whole character group^(?!.*test).*$
is suggested which did not work for me.
它可以工作,但在大多数网站(如正则表达式)和否定整个字符组^(?!.*test).*$
的建议中,这对我不起作用。
As per my understanding ^(test)
is sufficient so why ^(?!.*test).*$
is required?
根据我的理解^(test)
就足够了,为什么 ^(?!.*test).*$
需要?
回答by hwnd
You want the following instead.
您想要以下内容。
^(?:(?!test).)*$
Regular expression:
正则表达式:
^ the beginning of the string
(?: group, but do not capture (0 or more times)
(?! look ahead to see if there is not:
test 'test'
) end of look-ahead
. any character except \n
)* end of grouping
$ before an optional \n, and the end of the string
With using ^(test)
, it is only looking for testat the beginning of the string, not negating it.
使用 using ^(test)
,它只在字符串的开头寻找test,而不是否定它。
The negation ^
operator will only work inside of a character class [^ ]
, but whole words do not work inside of a character class. For example [^test]
matches any character except: (t
, e
, s
, t
)
否定^
运算符只能在字符类内部工作[^ ]
,但整个单词在字符类内部不起作用。例如[^test]
匹配任何字符,除了: ( t
, e
, s
, t
)
回答by SocketM
.*
= anything zero or more times
.*
= 零次或多次
The Regex:
正则表达式:
^((?!test).)*$
I misunderstand it. Now I think it will work.
我误解了。现在我认为它会起作用。