gpt4 book ai didi

java - 正则表达式使用 Java 搜索包含 + 或 # 的字符串

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:24 25 4
gpt4 key购买 nike

我正在使用 Java Pattern 类进行一些字符串搜索。我正在尝试使用 java Pattern 类匹配内部包含“c++”或“c#”的字符串 (txt)。

String txt="c++ / c# developer";
Pattern p = Pattern.compile(".*\\b(c\\+\\+|c#)\\b.*" , Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(txt);
while (m.find()) {
...
break;
}

m.find 总是错误的我究竟做错了什么?谢谢提供

最佳答案

\\b 是一个单词边界。这意味着它匹配一个单词和一个非单词字符。 +# 都是非单词字符,所以你需要 c++c# 后跟一个字母、数字或下划线。尝试删除 \\b 或用 \\B 替换它(这需要在 + 之后有另一个非单词字符或 #)。

请注意,当您使用find 时,您也不需要.*find 将愉快地返回部分匹配项。您的模式会为您提供第一个捕获组中最后一次出现的 c++c# 。如果这不是您想要的,请删除括号和通配符。

Working demo.

编辑:如果您要添加其他确实以单词字符结尾的替代项(例如java)。最简洁的解决方案是根本不使用 \\b\\B,而是使用负前瞻创建您自己的边界条件。这样你就可以简单地说“如果接下来没有单词字符则匹配”:

\\b(c\\+\\+|c#|java)(?!\\w)

Working demo.

关于java - 正则表达式使用 Java 搜索包含 + 或 # 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068470/

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