Java 正则表达式仅选取完整单词

Java 正则表达式仅选取完整单词,java,regex,Java,Regex,我只需要使用正则表达式选择一个完整的单词,我不想选择一个包含在另一个单词中的单词,但我想选择它是否以特殊字符(如_test,test.,test/,test)开头/结尾 示例:如果我要查找“文本”,我不想选择一个单词是否包含在其他单词中,如“上下文”。但是如果我在寻找全文,/text,text。,text_test,text,text的话,我想要它 编辑:由于我们无法识别复数形式,我将删除该部分。如果您要查找包含在变量word中的单词,我建议您使用 "\\b\\Q" + word + "\\E\

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

示例:如果我要查找“文本”,我不想选择一个单词是否包含在其他单词中,如“上下文”。但是如果我在寻找全文,/text,text。,text_test,text,text的话,我想要它


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

如果您要查找包含在变量
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());

如果要查找变量
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());

首先,完成以下教程将使您受益匪浅: Expresso是调试和测试正则表达式的优秀免费工具

第二,你的表达应该是这样的:

\b([^A-Za-z]| A-Za-z[^A-Za-z]+)(文本)([^A-Za-z]|[^A-Za-z]+A-Za-z)\b

\b字边界

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

“文本”将由子组2匹配


再次,浏览上面的教程,它很短,您可能已经知道了如何在这里得到答案的时间内创建这个表达式

首先,完成以下教程会让您受益匪浅: Expresso是调试和测试正则表达式的优秀免费工具

第二,你的表达应该是这样的:

\b([^A-Za-z]| A-Za-z[^A-Za-z]+)(文本)([^A-Za-z]|[^A-Za-z]+A-Za-z)\b

\b字边界

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

“文本”将由子组2匹配


再次,浏览上面的教程,它很短,您可能已经知道了如何在这里得到答案的时间内创建这个表达式

如果不访问单词列表,就不可能编写知道单词复数的正则表达式。你有字表吗?@马克,我没有这样的字表,你问的是不可能的。没有任何正则表达式可以匹配任何有效的英语单词。@sharma:顺便问一下,
test的
不是
test
的复数形式吗?复数形式是
tests
(没有撇号)。所以你只是在寻找任何一组两边都有非字母字符的字母?那么你的问题也许值得澄清一下。如果不访问单词列表,就不可能写出一个知道单词复数的正则表达式。你有字表吗?@马克,我没有这样的字表,你问的是不可能的。没有任何正则表达式可以匹配任何有效的英语单词。@sharma:顺便问一下,
test的
不是
test
的复数形式吗?复数形式是
tests
(没有撇号)。所以你只是在寻找任何一组两边都有非字母字符的字母?也许有必要澄清一下您的问题。我意识到您现在要求的是一些稍微复杂一点的东西,因为“全文”的情况-因此您可以尝试删除单词边界(两边的\b)。对于复数,您可以将“text”替换为(text | text)[^w]*适用于非字母数字字符,除了text和u text之外,它似乎不适用于这种情况啊,您是正确的,\w认为u是单词字符。我编辑了我的答案-新的表达式应该是完整的。我现在意识到,由于“全文”的情况,您要求的是稍微复杂一点的内容-因此您可以尝试删除单词边界(两边的\b)。对于复数,您可以将“text”替换为(text | text)[^w]*适用于非字母数字字符,除了text和u text之外,它似乎不适用于这种情况啊,您是正确的,\w认为u是单词字符。我编辑了我的答案-新的表达应该是完整的。