gpt4 book ai didi

Java 正则表达式不匹配

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:40 26 4
gpt4 key购买 nike

我知道这类问题经常被提出,但是我不明白为什么这个 RegEx 不匹配。我想检查行的开头是否有“M”。最后,我想要行尾的路径。这就是为什么 startsWith() 不符合我的需求。

line = "M            72208    70779 koj          src\com\company\testproject\TestDomainf1.java";

if (line.matches("^(M?)(.*)$")) {}

我也试过另一种出路:

Pattern p = Pattern.compile("(M?)");
Matcher m = datePatt.matcher(line);
if (m.matches()) {
System.out.println("yay!");
}

if (line.matches("(M?)(.*)")) {}

谢谢

最佳答案

正确的正则表达式很简单

line.matches("M.*")

因为 matches 方法强制整个输入序列必须匹配。然而,这是一个如此简单的问题,我想知道你是否真的需要一个正则表达式来解决它。一个普通的

line.startsWith("M")

line.length() > 0 && line.charAt(0) == 'M'

甚至只是

line.indexOf('M') == 0 

将满足您的要求。

性能?

如果您也对性能感兴趣,我的第二个和第三个选项在该部门获胜,而第一个可能很容易成为最慢的选项:它必须首先编译正则表达式,然后对其进行评估。 indexOf 的问题是它最坏的情况是扫描整个字符串。

更新

与此同时,您已经完全重述了您的问题并明确表示正则表达式是您真正需要的。在这种情况下,以下应该起作用:

Matcher m = Pattern.compile("M.*?(\\S+)").matcher(input);
System.out.println(m.matches()? m.group(1) : "no match");

请注意,这仅在路径不包含空格时有效。如果是,那么问题就更难了。

关于Java 正则表达式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18314450/

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