質問: phpやjavascriptなどの変数を正規表現で取得するときは、`^\w+=.*`ですが、 マッチさせたい変数が改行しているときは、`\w+=.*(\\\n.*)*`とすることで**複数行にも対応できる**そうです。 ここで改行に対応するために追加した`(\\\n.*)*`について質問があります。括弧内の.(任意の一文字)が0回以上とあり、カッコ外にも0回以上とあります。 括弧内までは、**任意の文字が0回以上**と理解できますが、カッコ外にもう一回*****ときた場合、題目のように理解するのが合っているのでしょうか。 つまり**任意の一文字が0回以上が0回以上**という理解であっておりますか。
回答: 括弧の外の*は「括弧の内側に書かれたパターンが0回以上」です。 よって`(\\n.*)*`は 「「改行およびそれに続く改行以外の文字が0文字以上続いたパターン」の0回以上の繰り返し」 と捉えるべきでしょう。これは後続するパターンがなければ「ある改行から始まるテキスト終端まで」ということもできると思います。 ご質問の内容には若干曖昧な点、不正確な点が散見されます。 > > phpやjavascriptなどの変数を正規表現で取得するときは、`^\w+=.*`ですが > > > 「変数」を正規表現で表したものではなく「行の先頭にある英数字・アンダースコアの1回以上の繰り返しに続いた`=`および行末まで任意個数の文字の繰り返し」としかいえないので、それは「識別子」でもありませんし、さらには代入文でさえありません。「代入文っぽい行」という程度の曖昧さになってしまうと思います。 また、`\w+`は識別子を表現するのにはいささか大雑把すぎる正規表現です。`\w`===`[A-Za-z0-9_]`ですので識別子の先頭文字としては不適切ですし、Javascriptの識別子は英数字とアンダースコアに限定されてもいません。(unicodeの実に多くの文字が識別子に使えます) しかし、本件ではそうしたところを問題にされてはいないと思うので、上記は参考までに・・・