正则表达式:不以 "hede" 结尾
RegEx: does not end with "hede"
[已更新答案]
- 不开始 "hede":
^(?!hede).*$
- 不包含 "hede":
^((?!hede).)*$
- 不结束 "hede":
(?s)^.*+(?<!hede)$
3 个表达式都有效。
正在检查:
Pattern p = Pattern.compile("(?s)^.*+(?<!hede)$");
assertTrue( p.matcher("hede obsolete").matches()); //ok
assertTrue( p.matcher("obsolete hede obsolete").matches()); //ok
assertFalse(p.matcher("obsolete hede").matches()); //ok
您可以使用 lookbehind
。
^.*(?<!hede)$
或者您可以使用
^.*+(?<!hede)$
使用 @stribizhev
建议的所有格量词
您可以使用这个负面前瞻:
^(?!.*hede$).*$
关于@vks 建议的 ^.*(?<!hede)$
解决方案的一些话:在一种情况下会很好 - 使用 占有量词和 .*
,.*+
.更新后的正则表达式如下所示:
(?s)^.*+(?<!hede)$
^
此外,行内修饰符(?s)
可用于强制.
匹配换行符,这样我们也可以检查多行字符串是否以hede
结尾。
加号有很大的不同。 因为 (?<!hede)
后面的 .*
模式正在检查 hede
每次测试一个字符时,这个正则表达式都不太稳定。所有格量词将确保在整个 string/line 匹配后不会发生回溯,并且只有在它之后才会执行 1 次 hede
缺失检查。
作为替代方案,您可以在开始时使用否定前瞻来检查字符串是否以 hede
结尾(此版本可与 matcher.find
一起使用):
(?s)^(?!.*hede$)
或者,匹配不以 hede
结尾的整个 line/string:
(?s)^(?!.*hede$).*
IDEONE demo,matches()
的示例(末尾没有 $
,因为整个字符串必须匹配):
System.out.println("A string with hede".matches("(?s)^(?!.*hede$).*")); // => false
System.out.println("A string without".matches("(?s)^(?!.*hede$).*")); // => true
[已更新答案]
- 不开始 "hede":
^(?!hede).*$
- 不包含 "hede":
^((?!hede).)*$
- 不结束 "hede":
(?s)^.*+(?<!hede)$
3 个表达式都有效。
正在检查:
Pattern p = Pattern.compile("(?s)^.*+(?<!hede)$");
assertTrue( p.matcher("hede obsolete").matches()); //ok
assertTrue( p.matcher("obsolete hede obsolete").matches()); //ok
assertFalse(p.matcher("obsolete hede").matches()); //ok
您可以使用 lookbehind
。
^.*(?<!hede)$
或者您可以使用
^.*+(?<!hede)$
使用 @stribizhev
建议的所有格量词您可以使用这个负面前瞻:
^(?!.*hede$).*$
关于@vks 建议的 ^.*(?<!hede)$
解决方案的一些话:在一种情况下会很好 - 使用 占有量词和 .*
,.*+
.更新后的正则表达式如下所示:
(?s)^.*+(?<!hede)$
^
此外,行内修饰符(?s)
可用于强制.
匹配换行符,这样我们也可以检查多行字符串是否以hede
结尾。
加号有很大的不同。 因为 (?<!hede)
后面的 .*
模式正在检查 hede
每次测试一个字符时,这个正则表达式都不太稳定。所有格量词将确保在整个 string/line 匹配后不会发生回溯,并且只有在它之后才会执行 1 次 hede
缺失检查。
作为替代方案,您可以在开始时使用否定前瞻来检查字符串是否以 hede
结尾(此版本可与 matcher.find
一起使用):
(?s)^(?!.*hede$)
或者,匹配不以 hede
结尾的整个 line/string:
(?s)^(?!.*hede$).*
IDEONE demo,matches()
的示例(末尾没有 $
,因为整个字符串必须匹配):
System.out.println("A string with hede".matches("(?s)^(?!.*hede$).*")); // => false
System.out.println("A string without".matches("(?s)^(?!.*hede$).*")); // => true