例 |
正規表現の例 |
数値範囲 |
浮動小数点数 |
メールアドレス |
IPアドレス |
有効な日付 |
数値日付をテキストに変換 |
クレジットカード番号 |
完全行の一致 |
重複行の削除 |
プログラミング |
2つの近接した単語 |
落とし穴 |
カタストロフィックバックトラッキング |
過剰な繰り返し |
サービス拒否 |
すべてをオプションにする |
繰り返しキャプチャグループ |
Unicodeと8ビットの混合 |
このサイトについてさらに |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書評 |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
この例では、正規表現に慣れていない人がよく犯すよくある間違いを回避する方法を示します。例として、任意の浮動小数点数を一致させる正規表現を作成してみましょう。この正規表現は、整数と、整数部分が省略された浮動小数点数の両方を一致させる必要があります。1.5e8(科学表記法で1億5000万)などの指数付きの数は一致させません。
最初に思いつくのは、次の正規表現がうまくいくように思えることです。[-+]?[0-9]*\.?[0-9]*これは、浮動小数点数を、オプションの符号、それに続く一連の数字(整数部)、オプションの小数点、それに続く別のオプションの数字列(小数部)として定義しています。
正規表現を言葉で表現すると明らかになりますが、この正規表現のすべてがオプションです。この正規表現は、符号だけ、または小数点だけを有効な浮動小数点数と見なします。実際には、空文字列も有効な浮動小数点数と見なします。この正規表現を使用してファイル内の浮動小数点数を検索しようとすると、浮動小数点数がない文字列のすべての位置で長さゼロの一致が得られます。
ドットをエスケープしないこともよくある間違いです。エスケープされていないドットは、ドットを含む任意の文字に一致します。ドットをエスケープしていなければ、4.4と4X4はどちらも浮動小数点数と見なされます。
正規表現を作成する際には、何を一致させるべきかよりも、何を一致させるべきでないかを考慮することが重要です。上記の正規表現は、正規表現エンジンがgreedy(貪欲)であるため、適切な浮動小数点数に確かに一致します。しかし、不要なものを多く一致させるため、除外する必要があります。
より良い試みはこちらです。[-+]?([0-9]*\.[0-9]+|[0-9]+)この正規表現は、オプションの符号に一致します。これは、ゼロ個以上の数字に続くドットと1個以上の数字(整数部がオプションの浮動小数点数)、または1個以上の数字(整数)のいずれかに続きます。
これははるかに優れた定義です。一致には少なくとも1つの数字が含まれている必要があります。[0-9]+の部分を回避する方法はありません。不要な一致(数字のない一致)を正常に除外しました。
この正規表現は次のように最適化できます。[-+]?[0-9]*\.?[0-9]+.
指数付きの数にも一致させたい場合は、次を使用できます。[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?各要素をオプションにするのではなく、指数全体をグループ化することで、指数全体をオプションにしました。
最後に、特定の文字列に浮動小数点数が含まれているかどうかを検証する場合(長いテキスト内から浮動小数点数を検索するのではなく)、正規表現をアンカーする必要があります。^[-+]?[0-9]*\.?[0-9]+$または^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$これらの正規表現のバリエーションは、RegexBuddyのライブラリにあります。
| クイックスタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書評 |
| 正規表現の例 | 数値範囲 | 浮動小数点数 | メールアドレス | IPアドレス | 有効な日付 | 数値日付をテキストに変換 | クレジットカード番号 | 完全行の一致 | 重複行の削除 | プログラミング | 2つの近接した単語 |
| カタストロフィックバックトラッキング | 過剰な繰り返し | サービス拒否 | すべてをオプションにする | 繰り返しキャプチャグループ | Unicodeと8ビットの混合 |
ページURL:https://regular-expressions.dokyumento.jp/floatingpoint.html
最終更新日:2021年9月2日
サイト最終更新日:2024年3月15日
Copyright © 2003-2024 Jan Goyvaerts. All rights reserved.