從給出的錯誤信息,這看起來一點也不像顯示的字符串正則表達式,我推斷原始模式基本如下,我已經自由地重新格式化,添加符號常量,並以我們可能會檢查並更容易處理的行號。
(所有非平凡的模式應該始終寫在(?x)
模式 - 儘管Java的這裏打架反對你,你還是應該這樣做)
1 (?: \P{L} | \W | ^)
2 (
3 (?: \N{KATAKANA LETTER BE} \N{KATAKANA LETTER SU}
4 | \N{KATAKANA LETTER BE} \N{KATAKANA LETTER SU}
5 | \N{KATAKANA LETTER HE} \N{KATAKANA LETTER ZU}
6 )
7 (?: \N{KATAKANA LETTER PA})
8 |
9 \N{KATAKANA LETTER PA}
10 )
11 |
12 \N{KATAKANA LETTER HA}
13 )
14 \N{COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK}
15 )
16 (?: \b | $)
第一和最後一行是錯誤的,但是它們在與Java的破壞正則表達式有關的語義方式中是錯誤的。他們不是句法上的錯誤。
現在應該很明顯,句法問題是第13行和第15行的右括號是虛假的:它們沒有相應的開括號。
雖然第一行也是最後一行,但我仍然試圖理解你在這裏真正想做什麼。爲什麼重複第3和第4行?這沒有什麼用處。我可以看到沒有理由在第7行分組。
是否允許組合標記應用於上述任何事情?
至於第一行和最後一行中的錯誤,我是否明白一個簡單的單詞邊界就是您正在尋找的所有內容?你是否真的想把那些邊界角色作爲你比賽的一部分,或者你只是試圖建立邊界?你爲什麼說一個非字母或非字?
單詞字符做包括字母,至少,根據Unicode規範,即使Java確實出錯。唉,由於Java正則表達式錯誤,你只是包含了一堆字母,所以一旦我明白了你真正想要的東西,我們就必須重新編碼。
如果只有你使用的東西實際上符合UTS#18,它會工作正常,但正如我認爲你沒有(我沒有聽說過ICU),我們必須沿着線路修復它我有previously outlined。
無論是單詞還是字符串的開頭都可以用於第一個字母,而對於非單詞或字符串結尾的預讀都適用於最後一個單詞。這就是\b
當然是假設當面對單詞字符的時候你會這樣做,而且如果你保持清楚你的非單詞的粒子,它甚至可以用這種方法。
但是,直到我能看到更多的原始意圖,我不認爲我應該多說了。
錯誤消息*中的模式*包含兩個額外的) - 是錯誤消息還是您的帖子錯誤? – Erik 2011-04-12 21:22:47
您**不得**使用'\ W','\ w','\ s','\ d','\ b','\ p {alpha}'或任何其他字符類Java正則表達式中的快捷方式,因爲Java正則表達式庫不符合[Unicode正則表達式的形式要求](http://unicode.org/reports/tr18/#Compatibility_Properties)。你可以用'[\ pL \ pM \ p {Nd} \'\'\'\'\'\'用\ [\ pL \ pM \ p {Nd} \ p {Nl} \ p { p {Nl} \ p {Pc}]'如果你不關心Enclosed_Alphanumerics。或者,您可以使用符合Unicode標準的正則表達式庫或語言。這意味着調用ICU正則表達式庫,或者調用Perl的等等。 – tchrist 2011-04-12 21:31:32
你用'java -encoding UTF-8'編譯了嗎? – tchrist 2011-04-12 22:06:44