gpt4 book ai didi

java - 正则表达式量词未按预期工作

转载 作者:行者123 更新时间:2023-12-01 22:55:28 24 4
gpt4 key购买 nike

我似乎无法弄清楚正则表达式量词。像寻找“...”这样简单的事情对我来说不起作用。

这是我的模式:

Pattern p = Pattern.compile("\\.{3}");

我理解错了吗?表达式“X{n}”的意思是,取X恰好n次?

但是像“....”这样的字符串工作得很好,尽管它不完全是 3 次。

最佳答案

我假设由于 ... 对于 .... 也返回 true,那么您正在使用 Matcher 类中的 find 方法。现在我至少可以看到您想要实现的两件事:

  1. 您想检查整个字符串是否只是...
  2. 您想检查字符串是否包含 ... 但前提是它恰好是 3 个点,因此您不想接受 ... 如果它包含在其之前或之后添加一些点。

要解决第一种情况,您只需使用 matches 方法,例如

Pattern p = Pattern.compile("\\.{3}");
Matcher m = p.matcher("...");
System.out.println(m.matches());//returns true
m = p.matcher("....");
System.out.println(m.matches());//returns false

要解决第二种情况,您需要使用 negative-look-around明确表示 ... 之前或之后不应该有任何点的机制,因此您的正则表达式可以看起来像

Pattern p = Pattern.compile("(?<!\\.)\\.{3}(?!\\.)");

现在您可以像之前一样使用 find 方法。

Matcher m = p.matcher("some... words. with dots.. after..... them...");
while(m.find())
System.out.println(m.group()+" found at position "+m.start());

将打印

... found at position 4
... found at position 42

关于java - 正则表达式量词未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24120454/

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