電子書籍の厳選無料作品が豊富!

下記のPerl正規表現ですが、どんな意味か分かるでしょうか?
$var =~ s!/([^/]+|~(\.\.))/\.\./!/!g

参考書も読んでみたのですが分かりませんでした(セットされている文字列にどんなマッチング、置換をしているのでしょう)

お分かりの方いれば、よろしくお願いします。

A 回答 (2件)

逆にお聞きします。


これのどこがわからないのでしょうか?
少なくとも、この中には基本の表現しかないので、正規表現をかじった程度の方でも落ちついて考えれば初心者でも理解できるはずです。

少し難しい点は ! です。
よく s/old/new/ と「参考書」には載っていますが、実は、 / は それ以外の記号でも利用できます。今回のは /の代りに!を使った例です。

記号を変えると次のようになります。
・/ に「区切り」としての意味がなくなり、「/という文字にのみ一致する」表現となります。
・逆に、指定した記号(今回は!)には「区切り」としての意味が付くので、その特殊な意味を消すには\でエスケープする必要があります。

これは、パスやURLのマッチング等、 / をたくさん使用するときに、いちいち\/と書かずに済む、という利点があります。

ここまでわかれば
置換対象: $var
検索パターン: /([^/]+|~(\.\.))/\.\./
置換文字列: /
オプション: g
だということがわかります。あとは、/が正規表現の区切りではなく「/という文字に一致」ということに気をつければ、参考書を見ながら調べられるはずです
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/01 06:12

えぇと, まぁ「正規表現の意味」はそれでいいんですけど, ぶっちゃけ「これで何をしたいのか」が見えないっす>#1.


具体的には
$var =~ s!/[^/]+/\.\./!/!g
とどう違うんだっけなぁ, と.
    • good
    • 0
この回答へのお礼

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

回答ありがとうございました。

お礼日時:2011/03/01 06:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!