2013-07-23 34 views
0

我有一個功能,它在一個冗長的字符串中找到一個單詞。java:找到一個模式的整個匹配

如果變量「v」包含字符串<vocab></vocab>

之間

if(p.matches("\\W"+v+"\\W")) 
我想,這一行應匹配v是\ n或\噸或空間之間的完整的字,並沒有包含在線匹配換句話說。

這是我的字符串:

<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

我不能說你的問題是明確表示,整個串在任一端返回true,因此.*,你可以改寫和詳細點嗎? –

+0

不確定你的實際問題或問題,但作爲一個小記錄:我會使用'\ b'而不是'\ W'來匹配單詞邊界,因爲'\ b'也將匹配開頭或結尾該字符串(對於\ W而言不是真的)。 – Mario

+0

找到的答案... if(p.matches(「。* \\ b」+ t +「\\ b。*」)) –

回答

0

我建議使用Pattern.quote(regex)了變量v,因爲它可以包含一些正則表達式元字符。也要確保你匹配完整的單詞使用的單詞邊界。所以,你的格局將是這樣的:

Pattern p = Pattern.compile("\\b" + Pattern.quote(v) + "\\b"); 
0

正確的正則表達式是:

if (p.matches("(?s).*\\b" + v + "\\b.*")) 

這裏有一些要點:

  • (?s)手段 「點相匹配換行」,所以它會使用多行輸入工作
  • 使用正則表達式\b,這是一個「字邊界」
  • String.matches()必須匹配,所以整個匹配