PHPの正規表現は主に、文字列のパターン分割、マッチング、検索、置換操作に使用されます。一部の単純な環境では正規表現の使用が効率的でない場合があるため、PHP 正規表現をより効果的に使用する方法を包括的に検討する必要があります。
私の PHP 正規表現入門は、インターネット上の記事から始まりました。この記事は、PHP 正規表現の使用方法を浅いところから深いところまで説明していますが、学習の仕方は人によって異なります。使っているうちに忘れてしまうので、難しい知識についてはこの記事を何度も読み返して理解するのに時間がかかることもあります。これを読んだ後は、規則を適用する能力が大幅に向上することがわかります。
PHP正規表現の定義:
文字の配置と一致パターンを記述するために使用される文法規則。これは主に、文字列のパターン分割、マッチング、検索、置換操作に使用されます。
PHPの通常の関数:
PHP には 2 つの通常関数のセットがあり、その 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」が を参照する場合、一致するパターンも文字「/」です。
マッチング結果を保存する必要がない場合は、非ストレージモードユニット「(?:)」を使用してください
例えば/(?: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 = '';
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 );
エコー $str;
}
関数検索($url, $match){
$url を返します;
}
アサーションとの定期的なマッチング
$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 シリーズの実行効率について、preg の方が速いという記事を見たことがあります。具体的には ereg の方があまり使われておらず、これから歴史の舞台に登場する時期なので、追記したいと思います。 PCRE の方法に詳しい方は、個人的な好みなので比較はしません。よろしくお願いします。