0

\s に対する Java の正規表現マッチングがどのように機能するかについて、私は何かを理解していません。以下の単純なクラスでは、\s は [少なくとも] $ と * に一致するようで、気になるところです。\s を含めないと、各単語の最後の文字が切り捨てられます。そして、どちらの正規表現も文字列の末尾 " をキャッチしていないようです。誰かが何が起こっているのか説明してくれませんか?または、役に立つリソースを教えてくれますか?ありがとう.

public class SanitizeText {

        public static void main(String[] args)
                {
                String s = "123. ... This is  Evil !@#$ Wicked %^&* _ Mean ()+<> and ;:' - Nasty. \\  =\"";
                String t = "123. ... This is  Evil !@#$ Wicked %^&* _ Mean ()+<> and ;:' - Nasty. \\  =\"";

                s = s.replaceAll(".[^\\w\\s.]", " ");   // Does the \s match non-space chars? Sees like at least $ and * are matched.
                s = s.replaceAll(" {2,}", " ");

                t = t.replaceAll(".[^\\w.]", " ");              // Why does this regex chopping the trailing char of each word ??
                t = t.replaceAll(" {2,}", " ");

                System.out.println ("s: " + s);
                System.out.println ("t: " + t);
                }
        }

// produces:
// s: 123. ... This is Evil $ Wicked * _ Mean and Nasty . "
// t: 123 .. Thi i Evi Wicke Mea an Nast "
4

2 に答える 2

2

この正規表現が各単語の末尾の文字を切り刻むのはなぜですか??への回答

.[^\\w.]は、任意の文字 ( .) の後に単語やドット以外の文字が続き、スペースで置き換えられます。したがって、単語の最後の各文字とそれに続く空白に一致します。

\s はスペース以外の文字と一致しますか?への回答 少なくとも $ と * が一致しているように見えます。

いいえ。 char ( .) の後に単語や空白以外の文字が続く場合に一致します。だから毎回2キャラ。

.[^\\w\\s.]

に一致します

Wicked %^&* _
 1.   ^^
 2.     ^^

は一致し*ません。空白が続くため、置き換えられません。

于 2013-05-17T21:30:56.790 に答える