アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある本に正規表現の例として、以下のように記載されていました。

「A*C」の時は「AAAC」「AC」「C」など

最後の「C」は間違いのよう思えるのですが。

A 回答 (7件)

>正規表現と、ワイルドカードを混同



混同してしまっていました。失礼しました。

#5さんの回答の通りです。
    • good
    • 0
この回答へのお礼

私もワイルドカードのことが頭にあったものですから、理解しがたかったんだと思います。が、これはある意味当然のことだと思います。
本を読み直しましょうとか復習しましょうとか言われている人もいますが、大抵の本は、「前の文字の0回以上の繰り返し」という説明のみで、そこだけを何度読み直したって、「C」が該当するとは理解しかねると思います。
ワイルドカードの知識が下地にある人間は、「A*C」に関しては、「A」が残った上で、「*」に関してが、「前の文字の0回以上の繰り返し」に当てはまると理解するのが自然でしょう。
ですから、前の文字のゼロ回の繰り返しの時は、「A」はそのままで、「*」がゼロになり、「AC」になる。これが、ワイルドカードの知識のある人間の自然な考え方だと思います。
私が今後、私と同様の間違った認識を持っている人に教えることがあったなら、「前の文字のゼロ回以上の繰り返し」は、「*」単独のことを説明しているのではないので、「A*」をセットで考えるようにと教えます。これなら、即、なるほどと思えるでしょう。
本を読み直すことが無意味であることは一目瞭然ですから、そんな無意味なアドバイスは決してしないでしょう(笑)

お礼日時:2004/11/13 23:19

パターン A*C は、C にもマッチします。


No.3 の回答は、誤りです。
ちょっと実験してみれば、すぐにわかることです。

以下のサンプルプログラムを実行してみて下さい。

  $_ = "C";
  if (/A*C/) {
    print "Matched.\n";
  }

私の環境(ActivePerl 5.8.4)では、Matched. と表示されます。
    • good
    • 0

Linuxなどの環境があるなら、実際にやってみましょう。



$ cat data
AAAC
AC
A
C


$ egrep 'A*C' data
AAAC
AC
C

正規表現 A*C は C とマッチします。
    • good
    • 0

正規表現と、ワイルドカードを混同してしまっている人がいますね。

    • good
    • 0

jesuiさんのご指摘のとおり、「A*C」ではマッチしません。



「[A]*C」であればCもマッチします。

本に書いてあることでも、誤植や著者の思い込み等で間違っていることも多少ありますので、本は参考程度にして自分の目で確かめてみるのが一番だと思います。
    • good
    • 0

*は0文字にもマッチしてしまいますので、あっています。



なお、+は1文字以上になります。

メタ文字の違いを復習してみてください。

参考URL:http://www.atmarkit.co.jp/fdotnet/basics/regex01 …
    • good
    • 0

*の前の文字の「0回以上」の繰り返し、という意味なので、


正規表現A*Cは、Cの一文字と一致します。

本をもう一度読み直してみては?
    • good
    • 0

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