8

次の 2 行のコード:

System.out.println(Arrays.toString("test".split("(?<!^)")));
System.out.println(Arrays.toString("test".split("(?!^)")));

それぞれが同じ出力を生成します。

[t, e, s, t]

最終的な結果が得られることを期待していました

[, t, e, s, t]

^の前後で喜んで分割する必要があるためtです。誰かが私の考えが間違っている場所を指摘できますか?


別の投稿のおかげで、 ShortcutRecorderを見つけました。基本的に私が探していたもの。

4

1 に答える 1

7

(?!^)のように、文字列の先頭以外の任意の位置に一致します(?<!^)^錨には長さがないので、 前を見ても後ろを見ても関係ありません。

文字間の位置を示す次のtestような文字列を想像してください 。|

|  t  |  e  |  s  |  t  |
^ matches here         ($ matches here)

(?!^)0正規表現エンジンは 0 文字先を見て、ここから文字列の開始を「見る」ため、 位置で一致しません

(?<!^)ここでも一致しません。これは、正規表現エンジンが 0 文字分後方に検索したときに、ここから文字列の開始を「認識する」ためです。

于 2013-10-21T20:17:47.467 に答える