ホームページ  >  記事  >  php教程  >  正規表現の使い方を詳しく解説

正規表現の使い方を詳しく解説

WBOY
WBOYオリジナル
2016-06-21 09:10:111005ブラウズ

詳しいルール説明

UNIX システム愛好家に、安定したシステムとリモート起動機能に加えて何が最も気に入っているかを尋ねると、10 人中 9 人が正規表現を挙げ、最大の悩みはおそらく正規表現だと思います。複雑なプロセス制御と設置手順に対応します。では、正規表現とは一体何なのでしょうか?正規表現を真にマスターし、正しく柔軟に使用するにはどうすればよいでしょうか?この記事では、正規表現を理解してマスターしたいと考えている読者の役に立つことを願って、これを紹介します。

はじめに
簡単に言えば、正規表現はパターンのマッチングと置換に使用できる強力なツールです。正規表現は、vi エディター、Perl または PHP スクリプト言語、awk または sed シェル プログラムなど、UNIX システムに基づくほとんどすべてのツールで見つけることができます。さらに、JavaScript などのクライアント側スクリプト言語も正規表現のサポートを提供します。正規表現は、特定の言語やシステムの制限を超えて、広く受け入れられた概念と機能になっていることがわかります。
正規表現を使用すると、ユーザーは一連の特殊文字を使用して一致パターンを構築し、比較オブジェクトに含まれるかどうかに応じて、その一致パターンをデータ ファイル、プログラム入力、WEB ページ上のフォーム入力などの対象オブジェクトと比較できます。パターンが一致したら、対応するプロシージャを実行します。
例えば、正規表現の最も一般的な応用例の 1 つは、ユーザーがオンラインで入力した電子メール アドレスの形式が正しいかどうかを確認することです。ユーザーの電子メール アドレスの形式が正しいことを確認するために正規表現が使用されている場合、ユーザーが入力したフォーム情報は通常どおり処理されます。それ以外の場合、ユーザーが入力した電子メール アドレスが正規表現パターンと一致しない場合は、正しい電子メール アドレスを入力するように求めるプロンプト メッセージがポップアップ表示されます。 WEBアプリケーションの論理判断において正規表現が重要な役割を果たしていることが分かります。

基本文法
正規表現の機能と効果を予備的に理解した後、正規表現の構文形式を詳しく見てみましょう。
正規表現の形式は一般的に次のとおりです。
/love/
区切り文字「/」で囲まれた部分が、対象オブジェクト内で照合するパターンとなります。ユーザーは、一致するオブジェクトを検索するパターンのコンテンツを「/」区切り文字の間に入れるだけで済みます。ユーザーがパターンの内容をより柔軟にカスタマイズできるようにするために、正規表現は特別な「メタキャラクター」を提供します。いわゆるメタキャラクタは、正規表現において特別な意味を持つ特殊文字を指します。これを使用して、ターゲット オブジェクト内で先頭の文字 (つまり、メタキャラクタの前にある文字) の出現パターンを指定できます。
より一般的に使用されるメタキャラクターには、「+」、「*」、「?」があります。このうち、「+」メタキャラクタは、その先頭文字が対象オブジェクト内で 1 回以上出現する必要があることを規定し、「*」メタキャラクタは、その先頭文字が対象オブジェクト内で 0 回または連続して複数回出現する必要があることを規定します。 「?」文字は、その前のオブジェクトがターゲット オブジェクト内に 0 回または 1 回出現する必要があることを指定します。
次に、正規表現メタキャラクターの具体的な用途を見てみましょう。
/fo+/
上記の正規表現には「+」メタキャラクタが含まれているため、対象オブジェクト内で「fool」、「fo」、「football」の文字 f の後に 1 つ以上の文字 o が連続して出現する可能性があることを意味します。文字列が一致します。
/eg*/
上記の正規表現にはメタキャラクター「*」が含まれているため、対象オブジェクト内で文字 e の後に「easy」、「ego」、または「egg」が 0 個以上連続して出現する可能性があることを意味します。文字列内の文字 g と一致します。
/Wil?/
上記の正規表現には「?」メタキャラクタが含まれているため、対象オブジェクトの「Win」や「Wilson」などと同じになる可能性があることを意味します。0個または1個のl文字が連続して出現します。文字 i String が一致した後。
メタキャラクターに加えて、ユーザーは一致するオブジェクトにパターンが出現する頻度を正確に指定することもできます。たとえば、
/jim{2,6}/
上記の正規表現は、文字 m が一致するオブジェクト内に 2 ~ 6 回連続して出現できることを規定しているため、上記の正規表現は jimmy や jimmmmmy などの文字列と一致します。 。
正規表現の使用方法を予備的に理解した後、他のいくつかの重要なメタキャラクターの使用方法を見てみましょう。
s: タブキーと改行文字を含む単一のスペース文字の一致に使用されます。
d: 0 から 9 までの数字の一致に使用されます。文字、数字、またはアンダースコア文字と一致するため、
W: w と一致しないすべての文字と一致するために使用されます。
.: 改行文字を除くすべての文字と一致するために使用されます。
(注:sとS、wとWは互いの逆演算と考えることができます)
次に、正規表現で上記のメタキャラクターを使用する方法を例を通して見ていきます。
/s+/
上記の正規表現は、ターゲットオブジェクト内の 1 つ以上のスペース文字と一致するために使用できます。
/d000/
複雑な財務諸表を持っている場合、上記の正規表現を使用して、合計 1,000 元のすべての金額を簡単に見つけることができます。
上で紹介したメタキャラクターに加えて、正規表現にはロケーターという別の固有の特殊文字もあります。ロケーターは、ターゲット オブジェクト内で一致するパターンが現れる場所を指定するために使用されます。
より一般的に使用されるロケーターには、「^」、「$」、「b」、「B」が含まれます。このうち、「^」ロケーターは、一致するパターンがターゲット文字列の先頭に出現する必要があることを指定し、「$」ロケーターは、一致パターンがターゲット オブジェクトの末尾に出現する必要があることを指定し、b ロケーターは、一致するパターンがターゲット オブジェクトの末尾に出現する必要があることを指定します。一致するパターンは、ターゲット文字列の先頭または末尾の 2 つの境界のいずれかに出現する必要がありますが、「B」ロケーターは、一致するオブジェクトがターゲット文字列の先頭と末尾の 2 つの境界内に存在する必要があると規定しています。つまり、一致するオブジェクトをターゲット文字列の先頭またはターゲット文字として使用することはできません。同様に、「^」と「$」、「b」と「B」も、互いに逆演算である 2 セットのロケーターとみなすことができます。例:
/^hell/
上記の正規表現には「^」ロケーターが含まれているため、対象オブジェクト内の「hell」、「hello」、「hellhound」で始まる文字列と一致します。
/ar$/
上記の正規表現には「$」ロケーターが含まれているため、対象オブジェクト内の「car」、「bar」、「ar」で終わる文字列と一致します。
/bbom/
上記の正規表現パターンは「b」ロケーターで始まるため、対象オブジェクトの「bomb」または「bom」で始まる文字列と一致します。
/manb/
上記の正規表現パターンは「b」ロケーターで終わるため、対象オブジェクト内の「human」、「women」、または「man」で終わる文字列と一致します。
ユーザーがマッチングパターンをより柔軟に設定できるようにするために、正規表現を使用すると、ユーザーは特定の文字に限定されず、マッチングパターンの一定の範囲を指定できます。例:
/[A-Z]/
上記の正規表現は、A から Z までの範囲内の任意の大文字と一致します。
/[a-z]/
上記の正規表現は、a から z までの範囲内の任意の小文字に一致します。
/[0-9]/
上記の正規表現は、0から9までの範囲の任意の数値と一致します。
/([a-z][A-Z][0-9])+/
上記の正規表現は、「aB0」などの文字と数字で構成される任意の文字列に一致します。ここでユーザーが注意する必要があるのは、正規表現で「()」を使用して文字列を結合できることです。 「()」記号に含まれる内容は、ターゲット オブジェクトにも出現する必要があります。したがって、「abc」の最後の文字は数字ではなく文字であるため、上記の正規表現は「abc」などの文字列には一致しません。
プログラミングロジックの「OR」演算に似た正規表現を実装し、複数の異なるパターンからいずれかを選択してマッチングしたい場合は、パイプ文字「|」を使用できます。例:
/to|too|2/
上記の正規表現は、対象オブジェクトの「to」、「too」、または「2」に一致します。
正規表現でより一般的に使用される演算子には、否定演算子「[^]」もあります。先ほど紹介したロケーター「^」とは異なり、否定文字「[^]」は、パターンで指定された文字列が対象オブジェクト内に存在できないことを指定します。例:
/[^A-C]/
上記の文字列は、A、B、C を除くターゲット オブジェクト内の任意の文字と一致します。一般に、「[]」内に「^」がある場合は否定演算子とみなされ、「[]」の外側に「^」がある場合、または「[]」がない場合は否定演算子とみなされます。オペレーター。
最後に、ユーザーが正規表現パターンにメタキャラクターを追加して、一致するオブジェクトを見つける必要がある場合は、エスケープ文字「」を使用できます。例:
/Th*/
上記の正規表現は、ターゲットオブジェクトの「The」ではなく「Th*」と一致します。

使用例

正規表現をより包括的に理解した後、Perl、PHP、および JavaScript での正規表現の使用方法を見てみましょう。

通常、Perl における正規表現の使用形式は次のとおりです:

演算子 / 正規表現 / 置換する文字列 / 修飾子

演算子の項目には、それぞれ一致操作と置換操作を表す m または s を指定できます。 。

このうち、正規表現項目とは、照合または置換の対象となるパターンで、任意の文字、メタキャラクター、ロケーターなどで構成できます。置換文字列項目は、s 演算子を使用するときに、見つかったパターン マッチング オブジェクトを置換する文字列です。最後のパラメータは、さまざまな一致または置換方法を制御するために使用されます。例:

s/geed/good/

は、ターゲットオブジェクト内で最初に出現する geed 文字列を見つけて、good に置き換えます。ターゲット オブジェクトのグローバル スコープで複数の検索置換操作を実行したい場合は、パラメーター "g"、つまり s/love/lust/g を使用できます。

さらに、一致する大文字と小文字を制限する必要がない場合は、パラメータ「i」を使用できます。たとえば、

m/JewEL/i

上記の正規表現は、対象オブジェクトの Jewel、Jewel、または JEWEL に一致します。

Perlでは特殊な演算子「=~」を使って正規表現の一致するオブジェクトを指定します。例:

$flag =~ s/abc/ABC/

上記の正規表現は、変数 $flag 内の文字列 abc を ABC に置き換えます。

次に、Perl プログラムに正規表現を追加して、ユーザーのメール アドレス形式の有効性を検証します。コードは次のとおりです:

#!/usr/bin/perl
# get input
print "What's your email address?n"
chomp($email);表示結果
if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-] )+/ )
{
print(“あなたのメールアドレスは正しいです!n”);
}
else
{
print(“もう一度試してください!n”)
}

ユーザーがPHPを好む場合は、次のようにすることができます。 ereg() 関数を使用すると、パターン マッチング操作が実行されます。 ereg()関数の使用形式は以下の通りです:
ereg(pattern, string)

このうち、patternは正規表現のパターンを表し、stringは検索・置換操作を行う対象のオブジェクトです。メールアドレスの認証も同様です。PHPで記述したプログラムコードは以下の通りです。

if (ereg(”^([a-zA-Z0-9_-])+@([a- zA-Z0-9_ -])+(.[a-zA-Z0-9_-])+”,$email))
{ echo "あなたのメールアドレスは正しいです!";}
else
{ echo "お試しくださいまた!”;}
?> 最後に、JavaScript について見てみましょう。 JavaScript 1.2 には、正規表現の一致操作を実行するために使用できる強力な RegExp() オブジェクトが付属しています。 test() メソッドは、ターゲット オブジェクトに一致するパターンが含まれているかどうかを確認し、それに応じて true または false を返すことができます。

JavaScriptを使用して次のスクリプトを記述し、ユーザーが入力したメールアドレスの有効性を検証できます。