2011-12-28 40 views
2

工作specifc字符串我在Java中使用正則表達式模式(如下) working string 它工作正常。但是,當我嘗試使用下面的模式: non working pattern正則表達式模式匹配並不在Java

的字符串:海峽=

nonworking string 很抱歉的圖片上傳。看起來像a00 []中的字符'[]'在瀏覽器上的編碼方式不同。任何方式以不同的方式閱讀該字符?記事本++中相同的字符具有不同的表示形式。我正在使用RXTX和inputStream.read(readBuffer)來讀取數據。有什麼辦法可以在java中更新我的編碼方法來解決這個問題嗎? http://i.imgur.com/sdUjS.jpg i.imgur.com

P.S:對圖像描述抱歉 - 如果輸入它,我不能代表那個字符。 當我複製粘貼該字符時,它變成一個空的空間。

+1

你用手機拍了那張照片嗎?你不能只使用unicode(例如''blah \ u0123blah'')並粘貼代碼? – Bohemian 2011-12-28 11:36:05

+1

+1爲「截圖」。 ;-) – Qtax 2011-12-28 12:00:41

+0

-1傷害我的眼睛:( – prusswan 2011-12-28 13:01:45

回答

2

奇怪的符號(└)看起來像ASCII 3是如何在某些字體中表示的。

在正則表達式中,\b匹配單詞邊界。也就是說,在字母數字和非字母數字字符之間。它在第一種情況下起作用,因爲在匹配的子字符串之前有一個數字(「9」),並且在它之後有一個感嘆號(「!」)(它是非字母數字字符)。

在第二種情況下,您將感嘆號更改爲字母,因此不再有從字母數字到非字母數字的轉換。

的解決方案是延長的正則表達式所以它也符號和數字相匹配:

Pattern.compile("(\\x03\\d)(a)\\w*(?=\\x03\\d)"); 

我用\\x03\\d匹配碼。最後一部分(?=)是一個預測。它檢查它是否匹配,但不會消耗它。這是如此,所以你連續做了多個匹配。


一個更簡單的替代方法,就是將字符串拆分爲「└」,然後檢查這些碎片。

s.split("\u0003") 
+0

非常感謝MizardX的幫助,我仍然對這部分(\\ x03 \\ d)感到困惑,這個正則表達式是什麼意思?輸出數據?是└= \ u003的unicode?http://en.wikipedia.org/wiki/List_of_Unicode_characters – 2011-12-28 14:07:10

+0

「└」就是字符在某些字體中的外觀。「\ u0003」是你如何寫入ASCII字符3在java中,或者在正則表達式中使用'\ x03'。'\ x03 \ d'匹配ASCII字符3和數字('0' ...'9') – 2011-12-28 14:38:37

+0

再次感謝MizardX的及時幫助。編譯(「(\\ x03 \\ d)(a)\\ w *(?= \\ x03 \\ d)」);在此(a)中指代字母'a',其開頭爲? – 2011-12-28 19:13:57