- ベストアンサー
\+って何ですか
初めてのperl第2版を読んでいます。 正規表現のパターンの位置指定の所で /\b\+\b/; という例が出てきます。 2つの単語境界"\b"に"\+"が挟まれています。 この例の説明には "x+y"にマッチするが、"++"や" + "にはマッチしない とあります。 実際にスクリプトを書いてみると確かにその通りで、本の誤りという可能性も消えてしまいました。 他にも"aa+bb"や"12+39"などはマッチし、"+"はマッチしませんでした。 この"\+"はいったい何を表しているのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問の内容を取り違えていたかもしれない。 マッチするというのは、パターンマッチが真になるということだから、 /\b\+\b/は、x+y、12+39、aa+bbに、マッチする。 つまり真になる。 なぜかというと・・・ \bは単語の区切り(\wと\Wの間)にマッチするので、この3つはそれぞれ要件を満たしている(=マッチする) xという\wな文字 +という\Wな文字 yという\wな文字 となっているから(他のaa+bbなども同様)、xと+の間、+とyの間に、それぞれの\bがマッチし、それに挟まれるように+がマッチしている。なので真になる。 これで答えになっただろうか?
その他の回答 (3)
- eberbach
- ベストアンサー率14% (18/123)
補足を1つ。 >/\b\+\b/; >は"+"のみマッチするように思えます。 +のみにはマッチしない。 なぜなら、\bが指定されているから、単語の境界がなければマッチしないので。 +だけのときは、前にも後ろにも単語の境界はない。 +は\Wな文字なので、前後を\wな文字で挟んだときに単語の境界が出現する。(=そうなってはじめてマッチする) こんなところで解決したかな?
お礼
補足ありがとうございます。 前の回答で、ほぼ理解出来ていましたが、補足で、より理解を深めました。 でも、単語境界なんて言葉は今日初めてしりました。 慣れていきたいと思います。 今、このテキストの2/5ぐらいまで読んだところです。 初めの頃はprintの使い方とかで、すらすら理解出来てすいすい読んでいたのですが、 だんだん難しくなってきてページをめくる速度が落ちてきています。 なので、ひょっとしたらまた質問に来るかもしれませんが、その時も是非お願いします。
- eberbach
- ベストアンサー率14% (18/123)
これを実行してみた。 $data = 'x+y'; $data =~ m/(\b\+\b)/; print $1; 結果、+ だけが出力されたんだけども。
- eberbach
- ベストアンサー率14% (18/123)
+は正規表現で1回以上の繰り返しを表すので、+という文字を表現したいときには、エスケープして\+とする。つまりここでは+という文字という意味。
お礼
eberbachさん、早速のご返信ありがとうございます。 なるほど2つの単語境界"\b"に"+"という文字がはさまれているのですね。 となるとマッチするのは"+"だけだと思うのですが、 例だと"x+y"がマッチしています。 位置指定についてよく分かっていないのかも知れません。 1個前の例に /\bFred\b/; # Fredにはマッチするが、FrederickやalFredにはマッチしない というのがあったので。 この例に当てはめると /\b\+\b/; は"+"のみマッチするように思えます。 なのに"x+y"や"12+39"や"aa+bb"がマッチします。 スミマセンが教えてもらえないでしょうか。
お礼
eberbachさん、ありがとうございます。 答えになっています。 /\bFred\b/; で"+Fred+"がマッチしました。 \wと\Wの区切り目というのが理解できてきました。 単語境界という言葉からスペースを意識しすぎていたのだと思います。 \Wはスペースだけではなく+とかも含まれますからね。 そしてxやyは\wなのでxと+、+とyは単語境界になるのですね。