(転送) PHP 正規表現を使用するためのいくつかのヒント
転載元: http://jianzhong5137.blog.163.com/blog/static/982904920106149583449/
PHP 正規表現は主に、文字列のパターン分割、マッチング、検索、置換操作に使用されます。一部の単純な環境では正規表現の使用が効率的でない場合があるため、PHP 正規表現をより効果的に使用する方法を包括的に検討する必要があります。
私の PHP 正規表現の紹介は、インターネット上の記事から始まりました。この記事は、PHP 正規表現の使い方を簡単なものから奥深いものまで説明していますが、学習の成功は依然として重要です。使っているうちに忘れてしまうので、難しい知識については4~5回読んで理解するのに時間がかかることもあります。粘り強く読んでいくと、規則的なルールを適用する能力が大幅に向上することがわかります。
PHP 正規表現の定義:
文字の配置とパターンの一致を記述するために使用される文法規則。これは主に、文字列のパターン分割、マッチング、検索、置換操作に使用されます。
PHP の通常関数:
PHP には 2 つの通常関数のセットがあり、どちらも同様の機能を持っています。つまり、
1 つのセットは PCRE (Perl) で構成されます。互換性のある正規表現 ) ライブラリが提供されています。接頭辞「preg_」が付いた名前の関数。
POSIX (Portable Operating System Interface of Unix) 拡張機能によって提供される関数のセット。接頭辞「ereg_」が付いた名前の関数を使用します (POSIX 通常関数ライブラリは PHP 5.3 以降使用が推奨されなくなり、PHP 6 から削除されます)
POSIX 通常関数 Stage の今後の履歴により、また、PCRE と perl の形式は似ており、perl と php を切り替えるのに便利であるため、ここでは PCRE の規則性の使用に焦点を当てます。
PCRE 正規表現
PCRE は Perl Compatible Regular Expression の略で、Perl 互換の正規表現を意味します。
PCRE では、パターン式 (つまり、正規表現) は通常、「/apple/」のように 2 つのバックスラッシュ「/」で囲まれます。
正規表現のいくつかの重要な概念は次のとおりです: メタキャラクター、エスケープ、パターン単位 (繰り返し)、反意語、参照、およびアサーション これらの概念は、記事 [1] で簡単に理解して習得できます。
一般的に使用されるメタ文字:
メタ文字の説明
A 文字列の先頭のアトムと一致します
Z 文字列と一致します 末尾atom
b は単語の境界に一致します /bis/ は先頭が /isb/ である文字列に一致します 末尾が /bisb/ である文字列に一致します 区切り付き
B は単語の境界に一致します その他の任意の文字than /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 または cL と同等の復帰文字と一致しますcM
t タブ文字と一致します。x09 または cl
v 垂直タブ文字と一致します。In x0b または ck
oNN 8 進数と一致します。
xNN 16 進数と一致します
cC 制御文字と一致します
パターン修飾子 (パターン修飾子):
パターン修飾子は、特に大文字と小文字を区別せず、複数の行を一致させる場合に使用されます。 . この修飾子をマスターすると、遭遇する多くの問題が解決できることがよくあります。
i - 大文字と小文字の両方に一致します
M - 文字列を複数行として扱います
S - 文字列を 1 行として扱い、改行を通常のものとして扱います
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」が を参照する場合、一致するパターンも文字「/」です。
マッチング結果を保存する必要がない場合は、非保存パターン単位「(?:)」を使用します。
例: /(?:a|b|c)(D| E|F)\1g / は「aEEg」と一致します。一部の正規表現では、非ストレージ モード単位を使用する必要があります。それ以外の場合は、後続の参照の順序を変更する必要があります。上記の例は、/(a|b|c)(C|E|F)2g/ と書くこともできます。
PCRE 正規表現関数:
以下は引用された内容です:
preg_match() および preg_match_all()
preg_quote()
preg_split ()
preg_grep()
preg_replace()
関数の具体的な使用方法は、PHP マニュアルを参照してください。ここでは、私たちが蓄積したいくつかの正規表現を示します。
アクション属性の一致
以下は引用された内容です:
$str = '';
$match = ''; action="(?!http:)(.*?)"s/', $str, $match);
print_r($match)
正規表現でコールバック関数を使用する
以下は引用内容です:
/**
* 一部の文字列をコールバック関数で置き換えます
*
*/
function callback_replace() {
$url = 'http://esfang . house.sina.com.cn';
$str = ''
$str = preg_replace ( '/(?<=saction=")(?!http:)(.*?) ? ="s)/e', 'search($url, \1)', $str );
echo $str;
}
関数 search($url, $ match){
return $url . '/' . $match;
アサーションとの通常のマッチング
以下は引用された内容です。 >
$match = '';
$str = 'xxxxxx.com.cn 太字
段落テキスト
' preg_match_all ( '/(?< ; =<(w{1})>).*(?=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 シリーズの実行効率については、特に ereg はあまり使われておらず、これから歴史の舞台に立つため、preg の方が速いという記事を見たことがあります。私は個人的に PCRE 法を好むので、比較はしません。PCRE 法に詳しい友人が意見を述べていただければ幸いです。