2012-10-12 46 views
1

當我的文本有單引號時,該模式失敗。Java正則表達式在搜索文本中的單引號失敗模式

我試圖用\\Q\\E來解決它,就像在Perl中那樣,但是編譯模式失敗。

例如

的模式"(?i)Name is\\b(\\w+)\\b"

如果文字是"My name is Foampile X",我得到一個匹配。但是對於"My name is 'Foampile'"我沒有得到一個匹配。

我能做些什麼來將單引號視爲任何其他字符?

+0

字邊界是單詞字符'A-Za-z0-9_'和非單詞字符(除了'A-Za-z0-9_'之外的字符)之間的邊界。因此,你的正則表達式不起作用。 – nhahtdh

+0

你想在「我的名字是'Foampile''''的情況下匹配什麼? – nhahtdh

回答

-1

\w字符類是任何字母。您需要將您的用不了兩年時間正則表達式來包括其他的可能性:

"Name is [\w']+" 

這給正則表達式的可能值的集合擴大,包括字母或報價。但是,強制引用正確名稱並不是精確匹配。這看起來更像是:

"Name is ['"]?[\w']+['"]?" 
+0

在空格和''之間仍然沒有詞邊界 –

+0

請正確測試並編寫正則表達式。 – nhahtdh

+0

你也忘了捕獲組 –

1

我覺得很奇怪,你在任何情況下比賽,因爲你忽略空間之前Foampile\b不消耗字符)。請注意,\w不匹配引號,但只有[a-zA-Z0-9_]。所以,這取決於你是否想要做包括引號或者不是你可以嘗試以下操作之一:

"(?i)Name is\\W+(\\w+)" 
or 
"(?i)Name is\\W+?('?\\w+'?)" 

如果要斷言,名稱由一個空格隔開,無論行情與否,這些可能是簡化爲:

"(?i)Name is '?(\\w+)'?" 
or 
"(?i)Name is ('?\\w+'?)" 

如果你的問題實際上意味着你只有一直沒有引號測試,但你的實際目標是接受報價只有名字,你可以離開了身後'所有這些?

但是,無論任何非單詞字符是否從句子的其餘部分劃定名稱,第一個變體都可以工作。