• ベストアンサー

Perl正規表現わかりますか?

下記のPerl正規表現ですが、どんな意味か分かるでしょうか? $var =~ s!/([^/]+|~(\.\.))/\.\./!/!g 参考書も読んでみたのですが分かりませんでした(セットされている文字列にどんなマッチング、置換をしているのでしょう) お分かりの方いれば、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

逆にお聞きします。 これのどこがわからないのでしょうか? 少なくとも、この中には基本の表現しかないので、正規表現をかじった程度の方でも落ちついて考えれば初心者でも理解できるはずです。 少し難しい点は ! です。 よく s/old/new/ と「参考書」には載っていますが、実は、 / は それ以外の記号でも利用できます。今回のは /の代りに!を使った例です。 記号を変えると次のようになります。 ・/ に「区切り」としての意味がなくなり、「/という文字にのみ一致する」表現となります。 ・逆に、指定した記号(今回は!)には「区切り」としての意味が付くので、その特殊な意味を消すには\でエスケープする必要があります。 これは、パスやURLのマッチング等、 / をたくさん使用するときに、いちいち\/と書かずに済む、という利点があります。 ここまでわかれば 置換対象: $var 検索パターン: /([^/]+|~(\.\.))/\.\./ 置換文字列: / オプション: g だということがわかります。あとは、/が正規表現の区切りではなく「/という文字に一致」ということに気をつければ、参考書を見ながら調べられるはずです

kitt31
質問者

お礼

>少し難しい点は ! です。 まさしくここでひっかかってました。 親切な解説、ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

えぇと, まぁ「正規表現の意味」はそれでいいんですけど, ぶっちゃけ「これで何をしたいのか」が見えないっす>#1. 具体的には $var =~ s!/[^/]+/\.\./!/!g とどう違うんだっけなぁ, と.

kitt31
質問者

お礼

確かに、この表現は変ですね。 他人が書いたコードなので、何か特別な意味があるのかと思ってました。 回答ありがとうございました。

関連するQ&A

専門家に質問してみよう