gpt4 book ai didi

java - 这个正则表达式不匹配是怎么回事?

转载 作者:行者123 更新时间:2023-11-29 04:01:35 25 4
gpt4 key购买 nike

public class PatternTest {
public static void main(String[] args) {
System.out.println("117_117_0009v0_172_5738_5740".matches("^([0-9_]+v._.)"));
}
}

这个程序打印“false”。什么?!

我期望匹配字符串的前缀:“117_117_0009v0_1”

我知道这些东西,真的我知道......但对我来说,我已经盯着它看了 20 分钟,并尝试了我能想到的每一种变化,但我显然遗漏了一些简单而明显的东西在这里。

希望 SO 的许多眼睛能在我为此失去理智之前为我挑出它。

谢谢!


最终的工作版本如下:

String text = "117_117_0009v0_172_5738_5740";
String regex = "[0-9_]+v._.";

Pattern p = Pattern.compile(regex);

Mather m = p.matcher(text);
if (m.lookingAt()) {
System.out.println(m.group());
}

对我来说,一个不明显的发现/提醒是,在访问匹配器组之前,必须调用 matches() lookingAt() 或 find() 之一。如果不是,则抛出 IllegalStateException 以及无用的消息“找不到匹配项”。尽管如此,groupCount() 仍将返回非零值,但它是谎言。不要相信它。

我忘了这个 API 有多难看。啊……

最佳答案

默认情况下,Java 坚持使用 ^$ 运算符,所以像这样的东西应该可以工作:

public class PatternTest {
public static void main(String[] args) {
System.out.println("117_117_0009v0_172_5738_5740".matches("^([0-9_]+v._.).*$"));
}
}

返回:

true

匹配内容:

117_117_0009v0_1

这是我用来提取匹配项的代码:

       Pattern p = Pattern.compile("^([0-9_]+v._.).*$");
String str = "117_117_0009v0_172_5738_5740";

Matcher m = p.matcher(str);
if (m.matches())
{
System.out.println(m.group(1));
}

关于java - 这个正则表达式不匹配是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175711/

25 4 0