正则表达式只选择全字

时间:2011-03-01 20:01:16

标签: java regex

我需要使用正则表达式选择一个完整的单词,如果它包含在另一个单词中,我不想选择一个单词,但我确实想要选择是否以_test,test等特殊字符开头/结尾。测试/,测试

示例:如果我正在寻找“文本”,我不想选择一个单词是否包含在“context”之类的其他单词中。但是如果我要查找全文,/ text,text.,text_test,text,text,那就想要它。

编辑:由于我们无法识别复数形式,我将删除该部分。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找变量word中包含的字词,我建议您使用

"\\b\\Q" + word + "\\E\\b"

以下是细分:

  • \b:字边界
  • \Q:没什么,但引用所有字符,直到\ E
  • \E:没什么,但结尾引用的是\ Q

这样的事情可能会:

Pattern p = Pattern.compile("\\b\\Q" + word + "\\E\\b");
Matcher m = p.matcher("word like \"context\" while looking for \"text\".");
while (m.find())
    System.out.println(m.group());

答案 1 :(得分:2)

首先,通过完成如下教程,您将从中受益匪浅:http://www.codeproject.com/KB/dotnet/regextutorial.aspx Expresso是一个用于调试和测试正则表达式的优秀免费工具。

其次,你的表达应该是这样的:

\ B([^ A-ZA-Z] | A-ZA-Z [^ A-ZA-Z] +)(文本)([^ A-ZA-Z] < EM> | [^ A-ZA-Z] + A-ZA-Z )\ b'/ p>

\ b字边界

([^ A-Za-z] | A-Za-z [^ A-Za-z] +)表示“非字母字符或字母字符后跟至少一个非字符字母“

“text”将与子组2匹配。

再次,通过上面的教程,它很简短,你可能已经想出如何在这里获得答案的时候创建这个表达式。