2015-01-15 47 views
1

我想提供支持以匹配Java中的標點符號和正則表達式字符。對標點的支持工作正常,但即使是簡單的正則表達式也是失敗的。Java中帶有標點符號的模式匹配

這裏是我的模式:

(\s\p{Punct}|^\p{Punct}|\s|^)ros?(\s|\p{Punct}|$) 

和內容我想匹配:rose

find()方法被用於這種模式返回false。我最初認爲,根本原因是該模式的{Punct}一部分,所以我試圖改變我的正則表達式來(\s\p{Punct}|^\p{Punct}|\s|^)ro?e(\s|\p{Punct}|$)在我的單元測試,但即使失敗

+3

我沒有看到任何與「e」匹配的東西。我想你可能會對'?'感到困惑。這意味着要匹配0或1次出現的前一個字符,所以'ros?'匹配'ro'或'ros'。它與Linux文件名通配符中的方式不匹配「任何字符」。如果這就是你想要的,使用與任何字符匹配的句點('.')。 – ajb

+0

我認爲你錯用了'^'特殊字符。你是否試圖用它來匹配輸入字符串的開頭,否定或者兩者兼而有之? – J0e3gan

+0

如果你想在'rose'中找到'ros',這個工作:http://ideone.com/pljbKU(在'$'後面加一個空的替換) –

回答

1

你的模式不匹配,因爲在「玫瑰」的'e'不是標點或空白字符。

除了你的模式中的ros?只使s只可選。

注意:Unix shell中的?*不是「Linux正則表達式」,它是一個「shell globbing」通配符。 Linux中的正則表達式(grep,sed,awk)全部使用.代替單個替換字符。