當我的文本有單引號時,該模式失敗。Java正則表達式在搜索文本中的單引號失敗模式
我試圖用\\Q
和\\E
來解決它,就像在Perl中那樣,但是編譯模式失敗。
例如
的模式"(?i)Name is\\b(\\w+)\\b"
如果文字是"My name is Foampile X"
,我得到一個匹配。但是對於"My name is 'Foampile'"
我沒有得到一個匹配。
我能做些什麼來將單引號視爲任何其他字符?
當我的文本有單引號時,該模式失敗。Java正則表達式在搜索文本中的單引號失敗模式
我試圖用\\Q
和\\E
來解決它,就像在Perl中那樣,但是編譯模式失敗。
例如
的模式"(?i)Name is\\b(\\w+)\\b"
如果文字是"My name is Foampile X"
,我得到一個匹配。但是對於"My name is 'Foampile'"
我沒有得到一個匹配。
我能做些什麼來將單引號視爲任何其他字符?
\w
字符類是任何字母。您需要將您的用不了兩年時間正則表達式來包括其他的可能性:
"Name is [\w']+"
這給正則表達式的可能值的集合擴大,包括字母或報價。但是,強制引用正確名稱並不是精確匹配。這看起來更像是:
"Name is ['"]?[\w']+['"]?"
我覺得很奇怪,你在任何情況下比賽,因爲你忽略空間之前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+'?)"
而如果你的問題實際上意味着你只有一直沒有引號測試,但你的實際目標是接受報價只有名字,你可以離開了身後'
所有這些?
。
但是,無論任何非單詞字符是否從句子的其餘部分劃定名稱,第一個變體都可以工作。
字邊界是單詞字符'A-Za-z0-9_'和非單詞字符(除了'A-Za-z0-9_'之外的字符)之間的邊界。因此,你的正則表達式不起作用。 – nhahtdh
你想在「我的名字是'Foampile''''的情況下匹配什麼? – nhahtdh