4
System.out.println("du hast mich".replaceAll("(?<=^(.*)) ", ", $1 "));
// prints "du, du hast, du hast mich"

^後ろを向いた後のシンボルの意味は何ですか? (この記号の標準的な意味は行頭であることは知っています)そして、ドット記号が du 、 du hast 、 du hast mich まで一致するのはなぜですか。

この正規表現がどのように適切に機能するかを説明してください.私は疑問に思っています.興味を持ってくれてありがとう.

4

3 に答える 3

2

ケンドールが説明します。これがステップバイステップです。

du hast mich
 ^ regex hasn't matched anything so no replacement

書く

du

du hast mich
  ^ regex matches

一致をコンマとスペースの前のすべてに置き換えます

, du

du hast mich
      ^ no match

書く

hast

du hast mich
       ^ regex matches

コンマとスペースの前のすべてに一致するものを置き換えます

, du hast

du hast mich
           ^ no match

そのままにしておく

mich

それをすべて組み合わせると、

du, du hast, du hast mich
于 2013-10-24T14:30:54.100 に答える
0

その正規表現はまったく機能しないはずです。すべきことは、後読みの制限のない量指定子のために例外をスローすることです(.*)。そのルールを回避できる不具合を発見したようです。でも使わないで!それは間違いなくバグであり、機能ではありません。

Java の後読みは常に少し厄介でした。これは、後読み部分式の既知の最大長要件が複雑であるためだと私は考えています。私はその機能が間違いだったと感じるようになりました。それがもたらした面倒を正当化するのに十分なほど役に立たないだけです. これが、後読みで量指定子を使用しないように努めている理由です。

于 2013-10-24T16:08:46.410 に答える