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

少し前のトピックの数値かどうかを判別するパターンマッチングの表現に
/^-?\d+\.?\d*$/
とあるかと思います。私なりにどうやったらこの正規表現が解読できるか、やってみているのですが、私の本(独習PERL)で正規表現の部分を調べると\dに関しては[0-9]と同じと出ているのですが、その他の文字(^-?、+\.?、*$)などについては載っておらず、どこで切るのかさえわかりません。
皆さんはどんな本を使って調べているのでしょうか?
また、私の調べ方が悪いのでしょうか?
(たとえば、-だけ調べるとマイナスと出てきちゃいますが、この場合は違い増すよねぇ?)
アドバイスお待ちしています。

A 回答 (4件)

あ, 多くのプログラム言語ではピリオドの前か後ろに数字があれば数値と解釈します.


例えば 0.5 でも .5 でも同じ値と解釈しますし, 2.0 と 2. も同じとみなすはずです.
むしろ, 「ピリオドの前と後ろのどちらにも必要」というのが少数派だったような.
    • good
    • 0

^-?\d+\.?\d*$ だと "2." にはマッチしますが ".2" にはマッチしません (ピリオドの前には数字が必要だから). かといって ^-?\d*\.?\d*$ としてしまうと今度は "-." なんてのもマッチしちゃいます.


でどうするかというと, | というまた別のメタ文字を使います. これは (その前後にある正規表現の) 少なくとも一方にマッチするという意味になります. 多くの場合, グルーピングの ( ) と組合せて (|) という形になります. 今の場合, 「ピリオドの前に 1個以上数字がある」か「ピリオドの後ろに 1個以上数字がある」という条件なので ^-?(\d+\.?\d*|\d*\.?\d+)$ となりますが, これは実は ^-?(\d+\.?\d*|\.\d+)$ と同じになります.
なお, この | や ( ) はプログラムによっては \| とか \( \) という形のこともあります. が, perl では「\ 記号」という形のメタ文字は存在しません. ちょっと覚えやすいかも.
    • good
    • 0
この回答へのお礼

なるほどぉ。要は後ろから見て同じ桁数(桁数という表現は変なのかな?)までをスイッチするような形になるのですね。ほんとにわかりやすかったです。ありがとうございました。
あと、2.について、これって数値として認識してくれないのではないか、と思って下記のような質問をしたのですが、VBではCInt(2.)でエラーにならなかったのでPERLでも大丈夫ってことですよね。失礼しました。

お礼日時:2005/04/21 15:09

おはようございます。


/^-?\d+\.?\d*$の回で最初のほうに恥ずかしながら間違った答えで解答した者です。
私の場合は、「ソフトバンクパブリッシング・結城浩著・Perl言語プログラミングレッスン入門編」で勉強してます。
今回使用した正規表現(\dや\.や?等全部)も解説されています。\3200もするのでちょっと高いですが重宝してます。

参考URL:http://www.sbpnet.jp/books/products/detail.asp?s …
    • good
    • 0
この回答へのお礼

ありがとうございます。リンク先の目次を見ただけでもだいぶ載ってそうというのがわかりました。今度本屋に行ってみます(~~)/

お礼日時:2005/04/21 11:08

正規表現を理解するには, まず次のメタ文字 (文字そのものではなくて特別な意味を持っている文字) を理解しておくのがよいと思います:


^ 先頭
$ 末尾
* (直前のものが) 0個以上ある (ないかもしれない)
+ (直前のものが) 1個以上ある
? (直前のものが) あるかもしれない (ないかもしれない)
. 任意の文字 (改行を除く)
[] 中の文字のどれか 1個 (- が途中にあるときはその範囲)
[^] 中にない文字
\ 直後のメタ文字の特別な意味を消して普通の文字とする

これくらいはだいたいどのプログラムでも同じように使われるので, 別のプログラムで使われる正規表現でもおよそ理解できるようになります. あとはプログラムによって異なるので個別に覚えることになります. perl の場合は \ のあとに英数字を入れると特別な意味を持ち (例: \d は [0-9]), 逆に \ のあとに英数字以外の文字が入ると必ずその文字そのもの (\. は ピリオドそのもの) という意味になります.

で ^-?\d+\.?\d*$ を解釈すると
^ 先頭に
- ハイフン (マイナス) が
? あるかもしれなくって
\d 数字 (0-9) が
+ 1個以上あって
\. ピリオド (小数点) が
? あるかもしれなくって
\d 数字が
* 0個以上あって
$ 最後
となります.
    • good
    • 0
この回答へのお礼

ありがとうございます。とてもわかりやすかったです。
ひとつ疑問に思ったのですが、
^-?\d+\.?\d*$  って(2.)などの最後にピリオド(小数点)があるものももしかしたらとおるのかなぁと思ったのですがいかがでしょうか?
ピリオドがあるかもしれなくって(実際あって)、数字が0個以上ということはない場合、というのは、起こりにくいとは思うのですが、ありえませんか?

お礼日時:2005/04/21 11:06

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