正規表現は面倒な場合があります。まあ、たまには!
正規表現とそのパターンについて学びましょう。複雑な文字のスープのように見えるそのようなパターンを検討していきます。正規表現の各文字が何を意味するのかを見ていきます。
この記事を読むと、正規表現を作成して自由に使用できるようになります。最後に、要件に基づいて正規表現を作成し、これらのツールを使用してテストできるように、オンライン正規表現テスト ツールのいくつかもリストします。
導入
正規表現、または一般的に知られているように、RegEx は、文字または文字列を検索するためのパターンとして使用できる文字のシーケンスです。
たとえば、文字列またはフレーズに「
apple
」という単語が含まれているかどうかを判断するには、正規表現「
/apple
」を使用して文字列内を検索できます。別の例として、「
/[0-9]
」を使用して、指定された文字列に 0 から 9 までの数値が含まれているかどうかを確認できます。
正規表現とその使用法
正規表現は、現代の Web 関連操作でさまざまな目的に広く使用されています。正規表現が頻繁に使用される例としては、Web フォーム、Web 検索エンジン、IDE の字句解析、テキスト エディター、ドキュメント エディターなどの検証が挙げられます。
私たちは皆、「
CTRL + F
」を何度も使用して文書またはコード内を検索し、特定の単語、語句、または表現を見つけたことがあるでしょう。この操作は、正規表現の使用の非常に一般的な例として指摘できます。
先に進む前に、非常に一般的に使用される正規表現を見てみましょう。
以下の RegEX が何に使われているか推測できますか?
^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
推測できなくても心配しないでください。この記事を読み終える頃にはきっと推測できると思います。
まずは RegEx の A、B、C から始めましょう。
トークン
まず、上に示した正規表現のさまざまな記号を見てみましょう。
^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
上記の正規表現を見ると、多くの記号、文字、トークンで構成されていることがわかります。それらが何を意味するのか見てみましょう。
トークン |
意味 |
^ |
このトークンは文字列の始まりを示します。 |
(…) |
これは、(…) 内に指定されたすべてがキャプチャされるグループを示します。 |
[…] |
[] は、一致する文字を囲みます。たとえば、[abc] は a、b、または c のいずれかに一致します。 |
az |
a から z までの 小文字 のアルファベットのセット。正規表現では大文字と小文字が区別されることに留意する必要があります。 |
アリゾナ州 |
A から Z までの 大文字 のセット。 |
0-9 |
0 から 9 までの数字。 |
_ |
これは文字 _ と一致します。 |
\ |
これはエスケープ文字です。 |
\。 |
これは文字「.」と一致します。文字通り。これは、記号「.」を使用するために使用されます。正規表現では、それ自体が任意の文字に一致するトークンです |
+ |
これは量指定子です。これは、一緒に使用される 1 つ以上の文字と一致します。たとえば、 a+ は、文字 a が 1 つ以上出現することを意味します 。 |
\- |
これは「-」文字と一致します。 |
@ |
これは「@」文字と一致します。 |
{} |
これは別の数量詞です。文字の出現回数を示すために使用されます。たとえば、a{3} は 3 つの a を意味します。 |
$ |
これは文字列の終わりを示します。 |
指定された正規表現パターンの内訳
さて、トークンに関する予備知識を備えた上で、上記の正規表現をデコードしてみましょう。
-
<small><span style="color: #ff0000;"><span style="color: #000000;">^([a-zA-Z0-9_\-\.]+)</span></span></small>
少なくとも 1 つ以上の大文字または小文字の英数字、アンダースコア、ハイフン、またはドットで始まる文字列を探していることを意味します。たとえば、 user_name.01 に似ているものはすべてパターンに一致します。ここですべての記号を含める必要はなく[a-zA-Z0-9_\-\.]
内の任意の 1 文字だけで十分であることを覚えておく必要があります。 - @ 文字は、@ が 1 回出現した場合に一致します。前の例に追加すると、 user_name.01@ のようなもの が当てはまります。
-
([a-zA-Z0-9_\-\.]+)
最初の点と同様です。これは、少なくとも 1 つ以上の英数字、アンダースコア、ハイフン、またはドットを含む文字列を探していることも意味します。例に追加すると、 user_name.01@gmail がここに収まります。 - すでにご想像のとおり、私たちは電子メールのパターンを示唆しています。続きまして、\。単一の「.」と一致します。キャラクター。現在の例を続けると、 user_name.01@gmail のようなものになります。
-
([a-zA-Z]{2,5})$
これは、文字列が大文字または小文字の 2 ~ 5 文字のアルファベットで終わる必要があることを意味します。前の例に .com を追加すると、 user_name.01@gmail.com を取得できます 。これは、電子メール文字列の一般的なパターンです。
上記をすべて組み合わせると、電子メール ID 文字列を検索していることがわかります。これで、この式を使用して電子メール ID を検証できるようになります。テスト電子メール ID がこのパターンと一致する場合、それは有効な電子メール ID であると言えます。
PS 。 – これは、Web 上で最も一般的な電子メール ID のパターンです。
トークンの種類
多くのトークンを正規表現内でさまざまに組み合わせて使用して、さまざまな式を記述することができます。以下では、正規表現で使用されるさまざまな種類のトークンを見ていきます。さらに、各カテゴリで最も一般的に使用されるトークンについても見ていきます。
基本トークン
基本的なトークンから始めましょう。これらのトークンは、ほぼすべての正規表現で使用されます。したがって、私たちはまずそれらについて学ばなければなりません。
トークン |
意味 |
\r |
これは復帰文字と一致します。 |
\0 |
ヌル文字と一致します。 |
\n |
これにより、新しい行が検索されます。 |
\t |
これはタブに一致します。 |
文字クラス
次に、キャラクタートークンを見てみましょう。これらは、アルファベット、数字、その他の特殊文字を照合するために使用されます。
トークン |
意味 |
ある |
これは文字通り文字 a に一致します。同様に、すべてのアルファベットと数字を単独で使用すると、特定の文字自体が検索されます。 |
ABC |
文字列 abc と一致します。 |
[ABC] |
これは、a、b、または c の中から 1 つの文字を検索します。 |
[^abc] |
これは、a、b、または c を除く任意の文字と一致します。 |
[az] |
a から z までの範囲の小文字 |
[^az] |
a から z の範囲にない文字。これには大文字も含まれます。 |
[AZ] |
A と Z の間の大文字。 |
[^AZ] |
A と Z の間にない文字。 |
[0-9] |
0 ~ 9 の範囲の任意の数値 |
[^0-9] |
0 ~ 9 の範囲にない文字 |
[a-zA-Z0-9] |
これは、a ~ z の間の小文字、A ~ Z の間の任意の文字 、 または 0 ~ 9 の間の任意の数字の文字に一致します。 |
[^a-zA-Z0-9] |
前のカテゴリに当てはまらない文字。 |
。 |
任意の 1 文字 |
\s |
これは空白文字を検索するために使用されます。 |
\S |
これは、空白以外の文字を検索するために使用されます。 |
\d |
これは任意の数字に一致します |
\D |
これは数字以外のすべてに一致します |
\w |
任意の単語文字に一致します |
\W |
単語以外の文字に一致します |
$ |
これは文字列の終わりを示します |
\b |
これは単語境界に一致します |
\B |
これは、単語以外の境界を照合するために使用されます。 |
数量指定子
この特別なクラスのトークンは、文字、文字列、または数値の連続出現数を照合するために使用されます。これらは他のトークンと組み合わせて使用されます。
いくつかの一般的な数量詞を見てみましょう。
トークン |
意味 |
え? |
これは、a の 0 回または 1 回の出現に一致します。 |
あ* |
これは、a が 0 個以上 (連続して) 出現する場合に一致します。 |
α+ |
これは、a が少なくとも 1 つ以上連続して発生する場合に当てはまります。 |
{5} |
これは、文字 a が 5 回連続して出現するものを検索します。 |
a{5, } |
これは、a が少なくとも 5 回以上連続して発生する場合に当てはまります。 |
a{5, 7} |
これは、5 から 7 までの任意の数の連続する a を検索します。 |
グループ
これらのトークンは、名前が示すようにグループ内で一致します。
トークン |
意味 |
(…) |
これにより、括弧内に囲まれたすべてが取り込まれます。 |
(a|b) |
これは a または b のいずれかに一致します。 |
(?:…) |
括弧内に囲まれたすべてのものと一致します |
(?(1)はい|いいえ) |
これは条件文と一致します。 |
フラグ
これらは、一致を検索するときにパターン マッチャー エンジンに与えられる特別な命令です。
トークン | 意味 |
g |
グローバルマッチ。これにより、一致エンジンが一致するものが見つからなくなるまで、つまり、指定された文字列または文字列のグループの終わりまで検索されます。 |
メートル |
複数行の一致、つまり行ごとに一致します。 |
バツ |
照合中に空白を無視するようにエンジンに指示します。 |
バツ |
これは拡張マッチングに使用されます。 |
s |
これは単一行と一致します。 |
私 |
これは、大文字と小文字を区別しないマッチングに使用されます。 |
あなた |
Unicode 文字の場合。 |
アンカー
位置に関するエンジンの追加指示。
トークン |
意味 |
^ |
これは文字列の始まりを示します |
\A |
これも文字列の始まりを示します |
\Z |
文字列の終わりのトークン。 |
\z |
文字列の絶対終了を示すトークン。 |
\G |
これは試合開始用です。 |
よく使用される正規表現
正規表現はインターネット上で広く使用されています。フォームの検証から特定のキーワードを含むデータの検索に至るまで、正規表現は現代のコンピューティング アプリケーションからほぼ切り離すことができません。
正規表現の使用例をいくつか見てみましょう。
電話番号の照合
インドで使用される電話番号のパターンを見てみましょう。国コードが最初に来ます。通常、「+」文字の後にインドの国コードである数字 91 が含まれます。また、インドの電話番号は通常、6、7、8、または 9 で始まり、その後に他の 9 桁が続きます。
したがって、インドの携帯電話番号の有効な正規表現は次のようになります。
^(\+91[\-\s]?)?[0]?(91)?[6-9]\d{9}$
パスワードの強度をテストする
ほとんどの Web サイトでは、数字、大文字、小文字、記号を組み合わせた強力なパスワードを提供することを推奨しています。また、最小文字数は 6 文字または 8 文字にする必要があります。これは、パスワードの解読が非常に困難になるようにするためです。
このルールに従ったパスワードは、正規表現を使用して生成またはパスワードの強度を検証できます。
^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})
URL マッチング
URL は、インターネットを使用して目的の Web ページにすばやくアクセスするための最も一般的な方法です。ほとんどすべての Web サイトには URL があります。したがって、すべての URL は標準化されており、明確なパターンに従います。すべての URL は、HTTP または HTTPs プロトコルに従い、多くの場合、その後に「 :// 」と「 www 」が続きます。次に、Web サイトの名前の後に .com、.net、または .org などが続きます。
URL の有効性をテストするには、以下のような正規表現を使用できます。
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)
日付と時刻の形式
日付と時刻の形式も、Web 全体で非常に一般的に使用されています。さまざまなアプリケーション、ソフトウェア、システムで使用される日付の形式は数多くあります。日付は常に、それを読み取ろうとしているユーザーまたはアプリケーションが使用できる形式で使用する必要があります。
dd-MM-yyyy 形式の日付は、以下に示す正規表現を使用して検証できます。
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$
次に、構築とトラブルシューティングに便利な オンライン RegEx ツール をいくつか見てみましょう。
正規表現、その例、高度な使用法について詳しく知りたい場合は、いつでも参照できる Web サイトのリストを以下に示します。
正規表現101

Regex101 は 、正規表現を作成するための優れたリファレンス ガイドおよび対話型ツールであり、正規表現をすぐに使い始めるのに役立ちます。
これを使用して、以下の言語の RegEx をテストできます。
- PCRE (PHP)
- ECMAScript (JavaScript)
- パイソン
- GoLang
一致、置換、単体テストなどの RegEx 機能のサポートを提供します。これとは別に、古いテスト済み正規表現を保存できます。
フリーフォーマッター

FreeFormatter は JavaScript ベースであり、拡張機能のために XRegExp ライブラリ を使用します。これにより、一致に対する正規表現のテストや、一致の置換が容易になります。以下のフラグをサポートしており、正規表現のテスト中に要件に応じて使用できます。
- i – 大文字と小文字は区別されません
- m – 複数行
- g – グローバル (最初の一致で停止しない)
- s – ドットはすべての INCLUDING 改行と一致します (XRegExp のみ)。
正規表現クロスワード

正規表現とパズルに興味がある場合は、この サイト にアクセスしてください。楽しくてインタラクティブなパズルがたくさんあります。これらは正規表現についてさらに学ぶのに間違いなく役立ちます。
- 携帯電話向けに最適化されており、外出先でも正規表現パズルを解くことができます。
- さまざまな記号と正規表現パターンを教えるステップバイステップのチュートリアル。
- 立体的な 2D 回文正規表現パズルに頭を悩ませましょう。
- 初心者から上級者まで楽しめる幅広い難易度の正規表現パズル。
正規表現

RegExr は、 正規表現を実際に使ってみるための Web サイトです。正規表現に相当するこの Codepen を使用すると、正規表現を作成したり、パターンを照合したり、あらゆる楽しみを楽しむことができます。
特徴
- JavaScript および PHP/PCRE RegEx をサポートします。
- 入力すると結果がリアルタイムで更新されます。
- 一致または式にカーソルを合わせると詳細が表示されます。
- 一連のテストを使用してパターンを検証します。
- 式を保存して他の人と共有します。
- ヘルプと例を含む完全な RegEx リファレンス。
パイテックス
Python ベースの正規表現テスターです。 Pythex は、 Python の正規表現を簡単にテストする方法です。 4 つのフラグが付属しています。
- 大文字と小文字を無視する
- 複数行
- ドットオール
- 冗長
ルーブル

Rubular は、 Ruby ベースの正規表現エディタです。 Ruby 2.5.7 以降のバージョンをサポートし、使用します。
デバッグックス

これは JavaScript ベースであり、Python および Perl 互換正規表現 (PCRE) の RegEx をサポートしています。この オンライン ツール を使用すると、RegEx を StackOverflow に埋め込むことができます。各 RegEx テストに対して一意のリンクを作成することで、RegEx 結果を共有する機能を提供します。
クラスを拡張する

ExtendsClass は 開発者向けのツールボックスです。以下の言語の RegEx テストのサポートを提供します。
- JavaScript
- Python (3.4)
- ルビー (2.1)
- Java (JDK 14)
- PHP (7)
正規表現テスター

この 無料の正規表現テスターを 使用すると、選択したエントリに対して正規表現をテストし、すべての一致を明確に強調表示できます。これを使用すると、将来の参照のために古いテスト済み正規表現を保存できます。さらに、JavaScript と PCRE RegEx もサポートしています。
ウェブツールキット

Web Toolkit に は一連のユーティリティ ツールが含まれており、RegEx テスターはその 1 つです。ここに正規表現を入力し、値に対してテストできます。また、式を置換、照合、コピーする機能も提供します。これとは別に、大文字と小文字を区別したグローバル一致を実行するためのトグルも提供します。
学習リソース
RegEx を学習したい場合は、オンラインで利用できる最高のコースをいくつか紹介します。
コーセラ
Coursera は、RegEx を使用した実践的な経験を提供する興味深いガイド付きプロジェクト コースを提供しています。これらのプロジェクト コースのほとんどは約 1 時間で、インストラクターと一緒に段階的に作業を進めることになります。ここでは、最高の RegEx プロジェクトをいくつか紹介します。
- Python の正規表現
- Java と RegEx を使用してテキスト データを抽出する
- Bash と RegEx を使用してテキスト データを抽出する
Udemy
Udemyは、3.5時間で基礎を学ぶ 初心者向けの完全な正規表現コース と、入力検証、データ処理、変換に正規表現を使用した実践的な経験を提供する プロジェクト付きのPython正規表現コース を提供しています。
結論
私たちは正規表現、いくつかの一般的な例、およびいくつかのオンライン テスト ツールを学びました。この知識があれば、正規表現を作成し、アプリケーションで使用できます。