blog

正規表現の簡単な使い方

コードを記述する過程で、しばしば特定の複雑なルールを満たす文字列を見つける必要があります。正規表現は、これらのツールのルールを記述するために使用され、その強力な構文形式を介して、文字列のマッチング問題...

Jun 21, 2020 · 4 min. read
シェア

コードを記述する過程で、多くの場合、特定の複雑なルールを満たす文字列を検索する必要があります、正規表現は、これらのツールのルールを記述するために使用され、その強力な構文形式を介して、文字列のマッチング問題の多数に対処するために助けることができる、以下は、正規表現の一般的に使用される構文のいくつかの簡単な要約です。

メタキャラクター

メタキャラクタは正規表現で特別な意味を持つ特殊文字で、よく使われるメタキャラクタを以下の表に示します:

.改行以外のすべての文字にマッチ
\wアルファベット、数字、アンダースコア、漢字のマッチング
\W非アルファベット、数字、アンダースコア、漢字のマッチング
\s任意の空白文字にマッチ
\S空白以外の文字
\d一致番号
\D数字以外の文字
\bマッチ x またはy
\B非単語境界の一致
文字列の先頭にマッチ
$文字列の末尾にマッチ

予選

一般的に使われる修飾子は以下のようになり、+?このような修飾子は可能な限り繰り返しを少なくすることを意味します。正規表現ではデフォルトで可能な限り長い文字列にマッチしますから、例えばa.*bであればaで始まりbで終わる最も長い文字列にマッチします。aababにマッチすればaababという文字列全体にマッチし、a.*?bであればaabにマッチします。

*前の要素に0回以上マッチ
+前の要素に1回以上マッチ
?マッチ x またはy
{n}前の要素にn回マッチ
{n,}前の要素に少なくともn回マッチ
{n,m}前の要素にn回以上、m回以下マッチ
*?できるだけ少ない回数で、好きなだけ繰り返します。
+?1回以上繰り返しますが、回数はできるだけ少なくします。
??0回または1回を繰り返しますが、回数はできるだけ少なくします。
{n,m}?n~m回繰り返しますが、回数はできるだけ少なくします。
{n,}?n回以上繰り返しますが、回数はできるだけ少なくします。

キャラクタークラス

\例えば、"abc "にマッチする場合は[abc]を、"a-z "にマッチする場合は[a-z]を使用することができます:

[xyz]含まれる文字のいずれかにマッチします。例えば、'[abc]'は'play'の'a'にマッチします。
[^xyz]含まれない文字
[a-z]指定範囲内の任意の文字にマッチ
[^a-z]指定した範囲以外の文字にマッチ
x|yマッチ x またはy

グループ化

複数の括弧がある場合、左から1番目の括弧を使用することで、go go、quick quickのような繰り返しのある単語にマッチさせることができます。

ゼロ幅アサーション

ゼロ幅のアサーションは、コンテンツがそれ自身のコンテンツを含んでいないマッチングに使用されますが、それ自身のコンテンツの位置から、その後ろまたは前のコンテンツに一致するように、それはマッチングを開始する位置を占有しますが、独自のコンテンツに一致しないため、コンテンツの説明は、次の例に示すように、より混乱するように、この位置を消費しません:

1.はゼロ幅正予測事前アサーションとも呼ばれ、出現位置の後ろがexpという表現にマッチする可能性があることを主張するもので、例えば˶bw+のように、ingで終わりingの内容を含まない単語の前部分にマッチします。

2.は、ゼロ幅肯定的回顧的後ろ向きアサーションとも呼ばれ、それが現れる位置の前が式expと一致することを主張します。例えば、˶w+bは、reで始まり、reの内容を含まない単語の後半と一致します。

とても長い数字の3桁目ごとにカンマを付けたい場合、カンマが必要な部分の前と中を次のように調べます: \d{3})+b, そしてそれを使って1234567890を調べます。......

両方のアサーションを使用します: \d+ は空白で区切られた数字にマッチし、空白は含まれないことに注意します。

オペレーターの優先順位

正規表現では、左から右の順序で同じレベルの優先順位は、異なるレベルの操作の最高から最低の順序で、最高の演算子から最低の演算子への優先順位によると、次の表に記載されています:

\エスケープ文字
, , []丸括弧と角括弧
*, +, ?n}, {n,}, {n,m}.修飾子
任意のメタ文字、任意の文字位置決めポイントとシーケンス
" "

その他

の使用はエスケープを意味し、例えば*は正規表現で何回でもという意味ですが、マッチさせる文字列の中にその文字が存在する場合は、˶*を使って通常の文字として扱うことができます。

例えば、0d{2}-d{8}|0d{3}-d{7}この式は、010-12345678のように市外局番が3桁で市内局番が8桁のものと、0376-2233445のように市外局番が4桁で市内局番が7桁のものの2種類のハイフンで区切られた電話番号にマッチします。

Read next

コンピューター・ネットワークのレイヤー7、レイヤー4、レイヤー5モデル

コンピュータ・ネットワークの基本概念の中で、階層アーキテクチャは最も基本的なものです。階層化の主な利点は次のとおりです。 1.各層は互いに独立しており、各層は内部実装を公開することなく、層間インターフェイスを通じて上下にサービスを提供します。

Jun 21, 2020 · 2 min read