2013-05-20 27 views
6

私はthisスレッドを発見し、その上にユーザの一人は、次のコード行投稿:私はこのコードが何を意味するか解読-to 12ようsources-のカップルを相談しているJavaの正規表現のメタ文字

String[] digits2 = number.split("(?<=.)"); 

をが、私はそれを理解することはできません。 split()メソッドの引数が何を意味するのか誰でも説明できますか?

編集:私が持っていたのと同じ疑問を持っている人には、ここでこれはpositive lookbehindある別の有用link

答えて

4

です。全体的な表現は、「どんな文字の後でも、何も捕まえない」という意味です。文字列が

ABC 

のように見える場合は基本的に、そしてマッチは文字の間、|で起こるであろう。

A|B|C| 
+0

私はそれを知っています。改行を除くすべての文字に一致しますが、この文脈では "<="は何を意味しますか? – Haque1

+1

@ Haque1これはメタキャラクタのシーケンスです。 *何かをキャプチャすべきではありません。エンジンは文字があることを確認する必要がありますが、その文字をストリームから削除すべきではありません。 – dasblinkenlight

+1

@ Haque1これはlookbehindの珍しい使用です。 '(?<= tag :)" [^ "] *" '。この式は、前に' tag: '文字列がある場合にのみ、引用符付き文字列と一致します。 – dasblinkenlight

1

.split("")(空の文字列/パターン上)は、正規表現の先頭にある空の文字列と一致します。これは望ましくない追加の空の文字列です。 (?<=.)は、0幅のスペースと一致する任意の文字に続いて(見た目が後ろであるために続く)ゼロ幅のアサーション(文字を消費しません)です。これは、各文字の間の空の文字列を分割しますが、最初の文字と文字列の先頭の間の空白は分割しません。

+0

ゼロ幅スペースはここで使う間違った言葉は、別のものです(http://en.wikipedia.org/wiki/Zero-width_space)。 – Cairnarvon

+0

@Cairnarvonはこれを指摘してくれてありがとう...どの言葉を好きですか? –

+0

I 「文字の境界」と言いたいのですが、それは厳密には正しいとは言えません。正直言ってわかりません。 – Cairnarvon

関連する問題