gpt4 book ai didi

java - 正则表达式:不以 "hede"结尾

转载 作者:行者123 更新时间:2023-12-03 21:39:37 24 4
gpt4 key购买 nike

[更新了答案]

  1. 不以“hede”开始:^(?!hede).*$
  2. 包含“hede”:^((?!hede).)*$
  3. 不以“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

最佳答案

关于^.*(?<!hede)$的一些话@vks 建议的解决方案:在一种情况下会很好 - 使用 所有格量词和 .* , .*+ .更新后的正则表达式如下所示:

(?s)^.*+(?<!hede)$
^

此外,内联修饰符 (?s)可用于强制 .匹配换行符,这样我们也可以检查多行字符串是否以 hede 结尾.

加号有很大的不同。(?<!hede)向后看 .*前面的模式正在检查 hede每次测试一个字符时,这个正则表达式都不太稳定。所有格量词将确保在整个字符串/行匹配后不会发生回溯,并且只有在它之后才会对 hede 进行 1 次检查。执行缺席。

作为替代方案,您可以在开始时使用否定前瞻来检查字符串是否以 hede 结尾。 (此版本可与 matcher.find 一起使用):

(?s)^(?!.*hede$)

或者,匹配不以 hede 结尾的整行/字符串:

(?s)^(?!.*hede$).*

参见 regex demo

IDEONE demo , 例如 matches() (末尾没有 $,因为整个字符串必须匹配):

System.out.println("A string with hede".matches("(?s)^(?!.*hede$).*")); // => false
System.out.println("A string without".matches("(?s)^(?!.*hede$).*")); // => true

关于java - 正则表达式:不以 "hede"结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com