一般的に使用される PHP 正規表現

WBOY
リリース: 2016-06-21 08:51:46
オリジナル
896 人が閲覧しました

マインドマップ

はじめに

開発では正規表現を頻繁に使用する必要があります。現在、JavaScript、Java、.net、php などの多くの開発言語に正規表現アプリケーションがあります。今日は正規表現についての私の理解を共有します。皆さんに教えてください。不適切だったら私に言ってください!

知っておくべき用語 - 次の用語についてどの程度知っていますか?

区切り文字; 修飾子; ワイルドカード (前方参照、逆参照);

ポジショニング

正規表現を使用するのはどのような場合ですか? すべての文字操作で正規表現が使用されるわけではありません。これは実際に効率に影響します。複雑なテキスト データの解析が必要な場合は、正規表現を使用することをお勧めします。

メリット

正規表現を使用すると、複雑な文字操作を処理する際の作業効率が向上し、コードをある程度節約できます。

デメリット

正規表現を使用する場合、正規表現が複雑になるとコードが複雑になり、理解しにくくなります。そのため、正規表現内にコメントを追加する必要がある場合があります。

ユニバーサルモード

区切り文字。通常は開始と終了の区切り文字として「/」が使用されますが、「#」も使用できます。

「#」を使用するのはどのような場合ですか? 通常、文字列に「/」文字が多数含まれる場合、そのような文字は uri などの正規表現でエスケープする必要があるためです。

「/」区切り文字を使用したコードは以下の通りです。

$regex = '/^http://([w.]+)/([w]+)/([w]+).html$/i';

$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

preg_match の $matches[0] には、パターン全体に一致する文字列が含まれます。

「#」区切り文字を使用したコードは次のようになります。このとき、「/」はエスケープされません。

$regex = '#^http://([w.]+)/([w]+)/([w]+).html$#i';

$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

修飾子: 正規表現の動作を変更するために使用されます。

('/^http://([w.]+)/([w]+)/([w]+).html/i') の最後の「i」は修飾子であり、無視することを意味します。私たちがよく使うもう 1 つの文字は、スペースを無視することを意味する「x」です。

貢献コード:

$regex = '/HELLO/';

$str = 'こんにちは';

$matches = array();

if(preg_match($regex, $str, $matches)){

echo 'いいえ i:Valid Successful!',"n";

}

if(preg_match($regex.'i', $str, $matches)){

echo 'YES i:Valid Successful!',"n";

}

文字フィールド: [w] 角括弧で囲まれた部分が文字フィールドです。

修飾子: [w]{3,5}、[w]*、[w]+ など、[w] の後の記号はすべて修飾子を表します。具体的な意味をご紹介します。

{3,5} は 3 ~ 5 文字を意味します。 {3,} は 3 文字を超え、{,5} は最大 5 文字、{3} は 3 文字です。 *は0以上、+は1以上を意味します。

キャレット

文字フィールド ([^w] など) に入れて否定 (含めないという意味) を表現します - 「選択を反転」

式の前に配置すると、現在の文字から開始することを意味します。 (/^n/i、n で始まることを意味します)。

しばしば「」エスケープ文字と呼ばれることに注意してください。 「.」、「/」などの一部の特殊記号をエスケープするために使用されます

ワイルドカード (ルックアラウンド): 特定の文字列内の特定の文字の有無をアサートします。 ルックアラウンドには、先読み (前方参照 ?=) と後読み (逆引き ?<=) の 2 種類があります。

形式:

前方参照: (?!) に対応する (?=) は否定的な意味を意味します。逆引き参照: (?

に対応)

の文字が続きます

$regex = '/(? $str = 'abcdefgk';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

否定的な意味:

$regex = '/(? $str = 'abcdefgk';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

文字幅: 0

ゼロ文字コードを検証

$regex = '/HE(?=L)LO/i';

$str = 'HELLO';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果を印刷できません!

$regex = '/HE(?=L)LLO/i';

$str = 'HELLO';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果を印刷できます!

説明: (?=L) は、HE の後に L 文字が続くことを意味します。ただし、(?=L) 自体は 1 文字を占有しないため、それ自体が 1 文字を占有する (L) とは区別する必要があります。

データをキャプチャ

タイプを指定しないグループ化は、後で使用するために取得されます。

指定されたタイプはワイルドカード文字を参照します。したがって、括弧の先頭に疑問符のないもののみがキャプチャされます。

同じ式内の参照は後方参照と呼ばれます。

呼び出し形式: 番号 (1 など)。

$regex = '/^(川山家)[ws!]+1$/';

$str = '川山家、ありがとう川山家';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

データのキャプチャを避ける

形式:(?:パターン)

利点: 有効な後方参照の数が最小限に抑えられ、コードがより明確になります。

名前付きキャプチャ グループ

形式: (?P) 呼び出しメソッド (?P=グループ名)

$regex = '/(?P

川山家)[s]Is[s](?P=著者)/i';

$str = 'author:chuanshanjia chuanshanjia です';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

ランニング結果

遅延マッチング (覚えておいてください: 2 つの操作が実行されます。以下の原則部分を参照してください)

形式: 修飾子?

原則: "?": 前に修飾子がある場合、最小のデータが使用されます。たとえば、「*」は 0、「+」は 1 となります。{3,5} の場合は 3 がとられます。

まず、次の 2 つのコードを見てください:

コード 1.

$regex = '/heL*/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 1.

コード 2

$regex = '/heL*?/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 2

コード 3、「+」を使用します

$regex = '/heL+?/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 3

コード 4、{3,5}

を使用します

$regex = '/heL{3,10}?/i';

$str = 'heLLLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 4

正規表現に関するコメント

形式: (?# コメント内容)

使用法: 主に複雑なコメントに使用されます

貢献コード: MYSQL データベースへの接続に使用される正規表現です

$regex = '/
^host=(?

([w!@#$%^&*()_+-]+) (?#ユーザー名)

([w!@#$%^&*()_+-]+) (?#パスワード)
(?!)$/ix';

$str = 'host=192.168.10.221root123456';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

エコー「n」

元のリンク: http://www.cnblogs.com/baochuan/archive/2012/03/12/2391135.html



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!