質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1519閲覧

任意の一文字が0回以上が0回以上

aaaaaaaa

総合スコア501

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/04/24 10:34

phpやjavascriptなどの変数を正規表現で取得するときは、^\w+=.*ですが、
マッチさせたい変数が改行しているときは、\w+=.*(\\\n.*)*とすることで複数行にも対応できるそうです。

ここで改行に対応するために追加した(\\\n.*)*について質問があります。括弧内の.(任意の一文字)が0回以上とあり、カッコ外にも0回以上とあります。
括弧内までは、任意の文字が0回以上と理解できますが、カッコ外にもう一回*ときた場合、題目のように理解するのが合っているのでしょうか。
つまり
任意の一文字が0回以上が0回以上
という理解であっておりますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

括弧の外の*は「括弧の内側に書かれたパターンが0回以上」です。
よって(\\n.*)*

「「改行およびそれに続く改行以外の文字が0文字以上続いたパターン」の0回以上の繰り返し」

と捉えるべきでしょう。これは後続するパターンがなければ「ある改行から始まるテキスト終端まで」ということもできると思います。


ご質問の内容には若干曖昧な点、不正確な点が散見されます。

phpやjavascriptなどの変数を正規表現で取得するときは、^\w+=.*ですが

「変数」を正規表現で表したものではなく「行の先頭にある英数字・アンダースコアの1回以上の繰り返しに続いた=および行末まで任意個数の文字の繰り返し」としかいえないので、それは「識別子」でもありませんし、さらには代入文でさえありません。「代入文っぽい行」という程度の曖昧さになってしまうと思います。

また、\w+は識別子を表現するのにはいささか大雑把すぎる正規表現です。\w===[A-Za-z0-9_]ですので識別子の先頭文字としては不適切ですし、Javascriptの識別子は英数字とアンダースコアに限定されてもいません。(unicodeの実に多くの文字が識別子に使えます)

しかし、本件ではそうしたところを問題にされてはいないと思うので、上記は参考までに・・・

投稿2017/04/24 11:35

編集2017/04/24 11:41
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問の主旨がちょっと明確に理解できないので、直接の回答ではないのですが、正規表現の確認は以下のサイトがオススメです。
regexper.com
いつも便利に使ってます。

投稿2017/04/24 11:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問