少し前のトピックの数値かどうかを判別するパターンマッチングの表現に
/^-?\d+\.?\d*$/
とあるかと思います。私なりにどうやったらこの正規表現が解読できるか、やってみているのですが、私の本(独習PERL)で正規表現の部分を調べると\dに関しては[0-9]と同じと出ているのですが、その他の文字(^-?、+\.?、*$)などについては載っておらず、どこで切るのかさえわかりません。
皆さんはどんな本を使って調べているのでしょうか?
また、私の調べ方が悪いのでしょうか?
(たとえば、-だけ調べるとマイナスと出てきちゃいますが、この場合は違い増すよねぇ?)
アドバイスお待ちしています。
No.4
- 回答日時:
あ, 多くのプログラム言語ではピリオドの前か後ろに数字があれば数値と解釈します.
例えば 0.5 でも .5 でも同じ値と解釈しますし, 2.0 と 2. も同じとみなすはずです.
むしろ, 「ピリオドの前と後ろのどちらにも必要」というのが少数派だったような.
No.3
- 回答日時:
^-?\d+\.?\d*$ だと "2." にはマッチしますが ".2" にはマッチしません (ピリオドの前には数字が必要だから). かといって ^-?\d*\.?\d*$ としてしまうと今度は "-." なんてのもマッチしちゃいます.
でどうするかというと, | というまた別のメタ文字を使います. これは (その前後にある正規表現の) 少なくとも一方にマッチするという意味になります. 多くの場合, グルーピングの ( ) と組合せて (|) という形になります. 今の場合, 「ピリオドの前に 1個以上数字がある」か「ピリオドの後ろに 1個以上数字がある」という条件なので ^-?(\d+\.?\d*|\d*\.?\d+)$ となりますが, これは実は ^-?(\d+\.?\d*|\.\d+)$ と同じになります.
なお, この | や ( ) はプログラムによっては \| とか \( \) という形のこともあります. が, perl では「\ 記号」という形のメタ文字は存在しません. ちょっと覚えやすいかも.
なるほどぉ。要は後ろから見て同じ桁数(桁数という表現は変なのかな?)までをスイッチするような形になるのですね。ほんとにわかりやすかったです。ありがとうございました。
あと、2.について、これって数値として認識してくれないのではないか、と思って下記のような質問をしたのですが、VBではCInt(2.)でエラーにならなかったのでPERLでも大丈夫ってことですよね。失礼しました。
No.2
- 回答日時:
おはようございます。
/^-?\d+\.?\d*$の回で最初のほうに恥ずかしながら間違った答えで解答した者です。
私の場合は、「ソフトバンクパブリッシング・結城浩著・Perl言語プログラミングレッスン入門編」で勉強してます。
今回使用した正規表現(\dや\.や?等全部)も解説されています。\3200もするのでちょっと高いですが重宝してます。
参考URL:http://www.sbpnet.jp/books/products/detail.asp?s …
No.1ベストアンサー
- 回答日時:
正規表現を理解するには, まず次のメタ文字 (文字そのものではなくて特別な意味を持っている文字) を理解しておくのがよいと思います:
^ 先頭
$ 末尾
* (直前のものが) 0個以上ある (ないかもしれない)
+ (直前のものが) 1個以上ある
? (直前のものが) あるかもしれない (ないかもしれない)
. 任意の文字 (改行を除く)
[] 中の文字のどれか 1個 (- が途中にあるときはその範囲)
[^] 中にない文字
\ 直後のメタ文字の特別な意味を消して普通の文字とする
これくらいはだいたいどのプログラムでも同じように使われるので, 別のプログラムで使われる正規表現でもおよそ理解できるようになります. あとはプログラムによって異なるので個別に覚えることになります. perl の場合は \ のあとに英数字を入れると特別な意味を持ち (例: \d は [0-9]), 逆に \ のあとに英数字以外の文字が入ると必ずその文字そのもの (\. は ピリオドそのもの) という意味になります.
で ^-?\d+\.?\d*$ を解釈すると
^ 先頭に
- ハイフン (マイナス) が
? あるかもしれなくって
\d 数字 (0-9) が
+ 1個以上あって
\. ピリオド (小数点) が
? あるかもしれなくって
\d 数字が
* 0個以上あって
$ 最後
となります.
ありがとうございます。とてもわかりやすかったです。
ひとつ疑問に思ったのですが、
^-?\d+\.?\d*$ って(2.)などの最後にピリオド(小数点)があるものももしかしたらとおるのかなぁと思ったのですがいかがでしょうか?
ピリオドがあるかもしれなくって(実際あって)、数字が0個以上ということはない場合、というのは、起こりにくいとは思うのですが、ありえませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- 大学受験 資格試験などの勉強で過去問題集の解説を理解する時、分からない用語を調べてどうするのが良いですか? 問 3 2023/06/18 17:18
- 日本語 日本語 読書 勉強 漢字ちょう(日本の中学生まで) 現代文単語(高校生の教科書) というのを私は、や 3 2022/09/11 18:51
- 数学 正規数の定義で分からないことがあります。 正規数の定義について専門書において 「xがr進正規であると 1 2023/07/17 20:50
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- YouTube 日本語文向けの正規表現が学べるサイトやYouTubeチャンネルがあったら教えてほしいです。 「正規表 6 2022/04/26 07:02
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- その他(コンピューター・テクノロジー) 正規表現の置換で数値を合計したいです。 2 2022/10/17 11:01
- 日本語 違う ちげー(よ) 違く(て) 6 2023/02/01 18:31
- 事典・辞書 本統に なぜ使う 2 2023/03/16 20:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現について VB6
-
シェルスクリプト [[ $number =...
-
なんで真面目な出会いを求める...
-
コマンドプロンプトでのsedの使...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
VBA 置換文字がみつからない時
-
マクロを使ってフォルダー内に...
-
VBA EXCEL あるセルの中の一...
-
「何とかで始まり、何とかで終...
-
pythonエラー
-
データにカンマが入ったCSVデー...
-
全角入力
-
英数字のみ全角から半角に変換
-
パイソンエラーについて
-
word差し込み印刷 半角カタカ...
-
[VBA][Excel]クリップボードか...
-
CString から LPCTSTRの型に変換
-
VBA 文字に半角が含まれて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現
-
コマンドプロンプトでのsedの使...
-
シェルスクリプト [[ $number =...
-
Perlで別ファイルから文字列の抽出
-
金額にマッチする正規表現について
-
正規表現のことで
-
リナックスの grepコマンド ...
-
この正規表現を教えて!
-
正規表現。行頭が○○以外にマッ...
-
アスタリスクを検索できません
-
正規表現 .+? について
-
sedの正規表現でグループ化する...
-
メールアドレスかどうかの
-
タグを削除する正規表現について
-
正規表現について VB6
-
言語ではなく、正規表現のみで...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
おすすめ情報