PHP での正規表現の使用

WBOY
リリース: 2016-06-21 08:56:55
オリジナル
1014 人が閲覧しました

正規表現は、文字列を処理するための高速で便利なツールとして、さまざまなプログラミング言語で広く使用されています。PHP でのいくつかの使用法を通じて、PHP で正規表現を使用するためのいくつかのテクニックを記録してみましょう。

私の正規表現入門は、インターネット上の記事 [1] から生まれました。この記事は、浅いところから深いところまで正規表現を使用する方法を説明していますが、それでも信頼する必要があります。個人的には、使っているうちに忘れてしまうので、難しい知識についてはこの記事を4、5回読みましたが、理解するのに時間がかかりました。これを読んだ後は、規則を適用する能力が大幅に向上することがわかるでしょう。

正規表現:

文字の配置とパターンの一致を記述するために使用される文法規則。これは主に、文字列のパターン分割、マッチング、検索、置換操作に使用されます。

PHP の通常の関数:

php には 2 つの通常関数セットがあり、どちらも同様の関数を持ちます。

1 つのセットは PCRE (Perl 互換正規表現) ライブラリによって提供されます。接頭辞「preg_」が付いた名前の関数;

POSIX (Unix のポータブル オペレーティング システム インターフェイス) によって提供される拡張機能のセット。接頭辞「ereg_」が付いた名前の関数を使用します (POSIX の通常の関数ライブラリは PHP 5.3 以降使用が推奨されなくなり、PHP 6 から削除されます)

POSIX 規則性が歴史の舞台に登場しようとしており、PCRE と perl の形式が似ているため、perl と php の間で切り替える方が便利であるため、ここでは PCRE 規則性の使用に焦点を当てます。

PCRE 正規表現

PCRE は Perl Compare Regular Expression の略で、Perl 互換の正規表現を意味します。

PCRE では、パターン式 (正規表現) は通常、「/apple/」のように 2 つのバックスラッシュ「/」で囲まれます。

正規表現のいくつかの重要な概念には、メタキャラクター、エスケープ、パターン単位 (繰り返し)、反意語、参照、およびアサーションが含まれます。これらの概念は、記事 [1] で簡単に理解して習得できます。

一般的に使用されるメタ文字:

メタキャラクターの説明

A は文字列
の先頭のアトムと一致します。 Z は文字列の末尾のアトムと一致します
b 単語 /bis/ の境界に一致します。 先頭が /isb/ である文字列に一致します。 末尾が /bisb/ である文字列に一致します。 区切られている
B 単語の境界を除く任意の文字に一致します /Bis/ 単語「This」の「is」に一致します

d [0-9]

に相当する数値と一致します。 D [^0-9]
に相当する数字を除く任意の文字に一致します。 w [0-9a-zA-Z_]
に相当する英語の文字、数字、またはアンダースコアと一致します。 W は、[^0-9a-zA-Z_]
に相当する英文字、数字、アンダースコアを除く任意の文字に一致します。 s は [ftv]
に相当する空白文字に一致します。 S [^ftv]
と同等の空白文字を除く任意の文字と一致します。 f x0c または cL
と同等のフォーム フィードと一致します。 x0a または cJ
に相当する改行文字と一致します。 キャリッジ リターンの一致は、x0d または cM
と同等です。 t は x09 または cl
と同等のタブ文字に一致します。 v x0b または ck
と同等の垂直タブ文字と一致します。 oNN は 8 進数と一致します
xNN は 16 進数と一致します
cC 制御文字と一致します

パターン修飾子:

パターン修飾子は、大文字と小文字を区別したり、複数の行を一致させたりする場合に特に使用されます。この修飾子をマスターすると、遭遇する多くの問題が解決されることがあります。

i - 大文字と小文字の両方に一致します

M - 文字列を複数行として扱います
S - 文字列を単一行として扱い、改行を通常の文字として扱い、「.」を任意の文字と一致させます
X - パターン内の空白は無視されます
U - 最も近い文字列
と一致します e - 置換された文字列を式として使用します
形式: /apple/i は、大文字と小文字を区別せずに、「apple」または「Apple」などと一致します。 /i

PCREのパターン単位:

//1 最初の属性を抽出します
/^d{2} ([W])d{2}\1d{4}$ は、「12-31-2006」、「09/27/1996」、「86 01 4321」などの文字列に一致します。しかし、上記の正規表現は「12/34-5678」の形式と一致しません。これは、パターン「[W]」の結果「/」がすでに格納されているためです。次の位置「1」が参照される場合、その一致パターンも文字「/」になります。

マッチング結果を保存する必要がない場合は、非保存パターンユニット「(?:)」を使用してください
たとえば、/(?:abc)(DEF)\1g/ は「aEEg」と一致します。一部の正規表現では、非ストレージ モード単位を使用する必要があります。それ以外の場合は、後続の参照の順序を変更する必要があります。上記の例は、/(abc)(CEF)2g/ と書くこともできます。

PCRE 正規表現関数:

preg_match() および preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()

関数の具体的な使用法については、PHP マニュアルを参照してください。ここでは、私たちが蓄積した正規表現をいくつか紹介します。

アクション属性の一致

$str = '

';
$match = '';
Preg_match_all('/s+action="(?!http:)(.*?)"s/', $str, $match);
Print_r($match);

正規表現でコールバック関数を使用する
/**
     * 一部の文字列をコールバック関数で置き換えます
     *
    */
関数 callback_replace() {
$url = 'http://esfang.house.sina.com.cn';
$str = '';
$str = preg_replace ( '/(?<=saction=")(?!http:)(.*?)(?="s)/e', 'search($url, \1)', $str );

echo $str;
}

関数検索($url, $match){
$url '/' を返します。
}

アサーションとの通常のマッチング
$match = '';
$str = 'xxxxxx.com.cn _fcksavedurl="">xxxxxx.com.cn太字 ;p>段落テキスト

';
Preg_match_all ( '/(?<=<(w{1})>).*(?=)/', $str, $match );
echo "
属性のない HTML タグのコンテンツと一致します:";
Print_r ( $match );

HTML ソース コード内のアドレスを置き換えます

$form_html = preg_replace ( '/(?<=saction="ssrc="shref=")(?!http:javascript)(.*?)(?="s)/e', 'add_url( $url, '\1')', $form_html );

最後に、通常のツールは強力ですが、効率と作成時間の観点からは、緊急のタスクや要求の少ないタスクの場合は、単純で大雑把な方法の方が良い場合があります。

preg と ereg の 2 つのシリーズの実行効率については、preg の方が速いという記事を見たことがあります。具体的には ereg の方があまり使われておらず、これから歴史の舞台に登場するので、私も ereg の方が好きです。 . PCRE メソッドなので、それに詳しい友人は意見を言うことができます。小さなオオカミの世界



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