2011-12-28 14 views
2

にspecifc文字列を動作しません私は(下記の)JavaでREGEXパターンを使用していました: Working Pattern正規表現パターンマッチングは、Java

文字列: working string それは正常に動作します。しかし、私は以下のパターン使用しようとしたとき:文字列のために non working pattern

を:STR =

nonworking string 画像のアップロードについては申し訳ありません。 a00 []の文字「[]」がブラウザ上で異なって符号化されているように見えます。そのキャラクターを別のやり方で読む方法はありますか?同じ文字は、メモ帳++では別の表現をしています。私はRXTXとinputStream.read(readBuffer)を使ってデータを読み込んでいます。これを克服するために私のエンコーディングメソッドをjavaで更新する方法はありますか? http://i.imgur.com/sdUjS.jpg

P.S:画像の説明に申し訳ありません - 入力するとその文字を表すことはできません。 その文字をコピーしてコピーすると、空白になります。

+1

携帯電話などで撮影しましたか?あなたはユニコード(例えば "blah \ u0123blah" ')を使用してコードに貼り付けることはできませんでしたか? – Bohemian

+1

+1 "スクリーンショット"。 ;-) – Qtax

+0

-1私の目を傷つけるために:( – prusswan

答えて

2

奇妙な記号(└)は、ASCII 3がいくつかのフォントでどのように表されるかのように見えます。

Regexでは、\bは単語境界に一致します。つまり、英数字と非英数字の間にあります。一致した部分文字列の前に数字( "9")があり、その直後に感嘆符( "!")(英数字以外の文字)があるため、最初のケースで機能します。

感嘆符を文字に変更したため、英数字から非英数字への移行がなくなりました。

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

Iはコードと一致する\\x03\\dを使用:

溶液はまた、シンボルと数字と一致するように正規表現を拡張することです。最後の部分(?=)は先読みです。一致するかどうかをチェックしますが、消費しません。これはそうなので、複数のマッチを連続して実行します。


もっと簡単な代替方法は、文字列を "└"に分割して調べることです。

s.split("\u0003") 
+0

助けを借りてくれてありがとうMizardX。私はまだ部分(\\ x03 \\ d)と混同しています。この正規表現は何を意味していますか?出力データ?└= \ u003のUnicodeですか?http://en.wikipedia.org/wiki/List_of_Unicode_characters –

+0

"└"は文字がいくつかのフォントでどのように見えるかだけです。\ u0003はASCII文字3を書く方法です'\ x03 \ d'はASCII文字3と一桁の数字(' 0' ... '9')がマッチします。 –

+0

タイムリーなヘルプMizardXをもう一度おねがいします。 (a)は、アルファベット「a」を指し、その先頭は? –