我需要使用正则表达式选择一个完整的单词,如果它包含在另一个单词中,我不想选择一个单词,但我确实想要选择是否以_test,test等特殊字符开头/结尾。测试/,测试
示例:如果我正在寻找“文本”,我不想选择一个单词是否包含在“context”之类的其他单词中。但是如果我要查找全文,/ text,text.,text_test,text,text,那就想要它。
编辑:由于我们无法识别复数形式,我将删除该部分。
答案 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匹配。
再次,通过上面的教程,它很简短,你可能已经想出如何在这里获得答案的时候创建这个表达式。