正则表达式搜索包含+或#using Java的字符串

时间:2013-04-17 19:23:31

标签: java regex

我正在使用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总是假的 我究竟做错了什么? 谢谢 奥弗

2 个答案:

答案 0 :(得分:6)

\\b是一个单词边界。这意味着它匹配单词和非单词字符。 +#都是非单词字符,因此您需要在c++c#后跟一个字母,数字或下划线。请尝试删除\\b或将其替换为\\B(这需要+#之后还有另一个非单词字符。

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

Working demo.

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

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

Working demo.

答案 1 :(得分:0)

您可以尝试使用^.*c(\+{2}|\#).*$。它说找到c后跟2 +#。您可以看到示例here