5

以前の同様の質問の更新としてこれを質問しようと思ったのですが、長くなりすぎました。

cssコメントに一致するw3.orgで指定された正規表現を理解しようとしていたところ、この疑問が生じました

なぜ彼らは使うのですか

\/\*[^*]*\*+([^/*][^*]*\*+)*\/
----------------^

ただの代わりに

\/\*[^*]*\*+([^/][^*]*\*+)*\/

?

どちらも同様に機能しています。なぜ彼らはそこに余分な星を持っているのですか?

  1. この部分を見てみましょう:

    \*+([^/*][^*]*\*+)*
    -A- --B--     -C-
    

    正規表現エンジンは A 部分を解析し、星がなくなるか改行が発生するまですべての星を照合します。したがって、A が完了すると、次の文字は改行またはスター以外の何かでなければなりません。では、なぜ使用する代わりに を[^/]使用したの[^/*]でしょうか?

  2. 繰り返しキャプチャ グループも見てください。

    ([/ または * 以外の任意の1文字][* 以外の 0 個以上の文字][1 つ以上の星])

    少なくとも 1 つ以上の星で終わる文字のグループをキャプチャします。したがって、C はすべての星を取り、次のラウンドで一致する星がない状態で B を残します。

    だからBパートはスターに全く会えない。だからそこに星を付ける必要はないと思います。

しかし、その正規表現は w3.org にあるため、私の理解が間違っている可能性があります。私が欠けているものを説明してください。

4

1 に答える 1

4

これは、 CSS3 Syntax モジュールで既に修正されています。

\/\*[^*]*\*+([^/][^*]*\*+)*\/   /* ignore comments */

余分なアスタリスクがなくなったことに注意してください。これにより、この式はあなたが持っているものと同じになります。

したがって、CSS2 の文法を書いているときの単純な間違いだったようです。メーリング リストのアーカイブを掘り下げて、関連する可能性のある議論があるかどうかを確認しています。

于 2012-05-15T11:30:26.560 に答える