我有一个函数,它在一个冗长的字符串中找到一个单词。
如果变量“v”包含<vocab></vocab>
if(p.matches("\\W"+v+"\\W"))
我希望这一行应该匹配,v是\ n或\ t \ t \ t或空格之间的完整单词,并且不包含在另一个单词中。
这是我的字符串:
<meta>
<vocab>called</vocab>
</meta>
<para>
called to-VP,Reid-NP,television cameras-NP
called to-VP,Reid-NP,one of-NP
one of-VP,Reid-NP,ornate rooms-NP
called to-VP,Reid-NP,Capitol-NP
called to-VP,Reid-NP,ceremony-NP
passed on-VP,last week-NP,spending bill-NP
passed on-VP,last week-NP,House-NP
passed on-VP,last week-NP,Senate-NP
officially complete-VP,ceremony-VP/NP,action-NP
called to-VP,television cameras-NP,one-NP
called in-VP,television cameras-NP,Capitol-NP
called for-VP,television cameras-NP,ceremony-NP
called-VP,Reid-NP,television cameras-NP
age-NP,last week-NP,event-num
</para>
答案 0 :(得分:0)
我建议您使用Pattern.quote(regex)
作为变量v
,因为它可以包含一些正则表达式元字符。还要确保匹配完整的单词使用单词边界。所以你的模式看起来像:
Pattern p = Pattern.compile("\\b" + Pattern.quote(v) + "\\b");
答案 1 :(得分:0)
正确的正则表达式是:
if (p.matches("(?s).*\\b" + v + "\\b.*"))
这里有一些重点:
(?s)
表示&#34; dot匹配换行符&#34;,因此它可用于多行输入\b
,这是一个&#34;字边界&#34; String.matches()
必须与整个字符串匹配才能返回true,因此两端的.*
都匹配整个字符串