Xin Xing が教える、PHP の正規表現を素早くマスターする方法
まず最初に言っておきたいのですが、この記事も複数の専門家のブログを読んでまとめたものですので、まず最初に申し上げておきたいのは、これらの専門家に敬意と感謝を表します。人数が多く、情報源が散在しているため、申し訳ありませんが、一人ずつ紹介することはできません。
************異言語テーマ******************
1 と同じです。 xml、json、cookie、session、get、post などのトピックと同様に、正規表現は言語にまたがるトピックであり、言語が文字列をサポートしている限り、正規表現をサポートする必要があると言えます。多くの関数は正規表現を使用しないと特に面倒ですが、正規表現を使用すると非常に簡単になるためです。
2. 正規表現は電子メール、QQ、携帯電話番号などの認証に使用でき、Web ページの収集にも使用できます。もちろん、正規表現は文字テキストに対するほとんどの操作は XML などのファイルの解析にはあまり強力ではありませんが、XML 内の特定のテキスト情報を抽出するには依然として非常に強力です。
3. したがって、将来どの言語に切り替えても、正規表現をしっかり学ぶのは非常に簡単です。
****************正規表現の役割**********
1 .正規表現には 3 つの主な機能があります。1 つ目は正規の一致、2 つ目は正規の置換、3 つ目は正規の抽出です。
2. いわゆる正規一致は、テキストの文字列が特定の正規表現ルールに準拠しているかどうかを検証するものです。たとえば、ユーザーが電子メール アドレスを持っているかどうかを確認するために正規一致を使用します。
3. いわゆる定期的な置換とは、単語エディターの検索と置換機能と同様に、エラーを迅速に修正するために、テキスト内の特定の情報を別の情報に置き換えることを意味します。
4. いわゆる正規抽出とは、正規表現に基づいてテキストから必要な情報を抽出することを意味します。たとえば、HTML ファイルからすべての タグを抽出します。 src 属性に基づいてすべての画像のハイパーリンクを取得します。これは、大量のテキスト情報から使用する情報を抽出するためです。
5. まず正規表現の書き方を学び、次に PHP で正規表現関数を使用して正規表現を操作する方法を学びます。
**************** 正規表現の記述規則 1************ ** *
1. 正規表現は通常、区切り文字として / を使用します。つまり、2 つのスラッシュで囲まれた部分が正規表現の規則とみなされ、/xinxing/ などの他のテキストと一致するために使用されます。この正規表現は、文字列 xxxxing のみと一致することを意味します。
2. 上で説明したように、文字は正規表現で使用でき、その役割は一致における文字と同等です。ただし、文字によってこれらの文字を操作できるようになります。より便利には、これらのメタキャラクターの前に、主役と呼ばれる文字が付けられます。主役とメタキャラクターは連携して機能します。
3. 先頭の文字がターゲット内に 1 回以上出現することを示すには + を使用し、ターゲット内に先頭の文字が 0 回または複数回出現することを示します。また、? は先頭のオブジェクトが存在する必要があることを示します。ターゲット内に 0 回または 1 回出現する場合、以下のものは無視されます。
4. たとえば、/xin+/ は xin、xinnnn、xinn、xinnnnn などに一致します。これは、ここでの + により n が 1 回または複数回出現することができ、xin?その後、先頭に xin がある限り、xixing、xingui、xinguimeng などの文字と一致させることができます。
5. メタキャラクターは、回数を指定する非常に大まかな方法です。たとえば、少なくとも m 回、最大で n 回を示す {m,} など、より洗練された演算を使用できます。少なくとも m 回出現することを意味し、{,n} は最大 n 回出現することを意味し、{t} は固定回数 t 回出現することを意味します。
6. たとえば、/xin{3,4}/ は xinnn と xinnnn の 2 つの状況に一致します。
**************正規表現記述ルール2************* ** *
1. 以前は単一の文字を先頭文字として使用できましたが、これは明らかに非常に弱いものであり、s を使用して単一のスペース文字と一致します。システム テーブルと改行文字、S はスペースを除く単一の文字と一致することを意味し、d は 0 ~ 9 の文字と一致するために使用され、w は英数字のアンダースコアと一致するために使用され、W は w と一致しないすべての文字と一致するために使用されます。ドットは、改行を除くすべての文字が一致することを示します。上記のデータからわかるように、s と S は、w と W と同様に、まったく逆の意味を持ちます。
2. たとえば、/s+/ は n 個のスペースと一致するために使用でき、/d00/ は 000、100、200 などの整数の数字と一致します。
******************正規表現でのロケーターと範囲の表現*********
1. 正規表現にはいわゆるロケーターもあり、^ は文字列の先頭に、$ は文字列の末尾に、b はターゲット文字列の先頭に出現する必要があります。または末尾、B は先頭または末尾に出現させてはならず、中間部分にのみ出現させることができます。
2. 実際、^ と $ は対義語であり、b と B も対義語であることがわかります。
3. 角括弧を使用して文字を表し、その中の範囲を指定できます。たとえば、/[a-z]/ は a から z までの小文字を表します。たとえば、/[0-9]/ は a から z までの小文字を表します。 0 /[a-c2-6]/ などの 9 までの数字は、a から c または 2 から 6 までの文字または数字と一致することを意味します。
4. この範囲修飾子は要素とともに使用できます。 /[a-z][0-9]+/ のように文字が接続されます。これは、文字で始まり、その後に 1 つ以上の数字が続くことを意味します。
5. 除外を示すために角括弧内に使用される否定記号 ^ もあります。たとえば、[^a-c] が角括弧内にある場合、それは否定を示します。角括弧の外側にある場合は、ロケーターとして扱われます。
6. 通常、エスケープ記号を使用します。たとえば、* は * 記号と一致することを意味します。
************************ご両親********** ****** *
1. 前に述べたように、メタキャラクターは複数の文字を括弧で囲むことができます。
2. たとえば、a(bc)* は、a の後に 0 個以上の bc が続くことを意味します。
3. たとえば、a(bc){0,7} は、a の後に 0 ~ 7 bc が続くことを意味します。
4. OR、つまり 2 つのうちの 1 つを選択することを意味する | もあります。
5. たとえば、hi|hello は hi または hello に一致することを意味し、(a|b)c は ac または bc に一致することを意味します。
******************ちょっとした運動*************** ***
1. 前回の紹介の後、ここで小さなドリルを実行して、どれだけ習得したかを確認しましょう。
2. 実際、ab* と ab{0,} は同じ意味を表します。ab? は a または ab に一致することを意味します。
*************************備考* ** ******************
1. 上記では正規表現の最も重要な部分を説明しましたが、まだ説明していない詳細がいくつかあります。以下でより重要なことについて話しましょう。
2. 先ほど、区切り文字として / を使用することについて説明しました。実際には、正規表現で / が頻繁に使用される場合に、区切り文字として # を使用することもできます。式をエスケープする必要はありません。
3. 正規表現の末尾に i を追加して、大文字と小文字が区別されないことを示します。
4. グループ化することができます。呼び出し形式は (?P) メソッド (?P=グループ名) です。 。
*********** ***PHP 関数******************
1. 通常のクエリを完了するために preg_match を使用します。マッチング関数 、最初のパラメータは正規表現、2 番目のパラメータは一致するテキスト、3 番目のパラメータはオプションであり、実際には 5 つのパラメータがありますが、多くの場合はあまり使用しません。 、次のコード例:
<?php//定义一个正则表达式$reg ="/xi/";//定义一个字符文本$msg ="xinxisgxagxiagslgxigsghg";//这里使用了全部匹配preg_match_all($reg,$msg,$match);//输出匹配到的全部信息print_r($match);
Array ( [0] => Array ( [0] => xi [1] => xi [2] => xi [3] => xi ) )
4. 結果を出力します。 : oonoosgxagooagslgoogsghg
<?php//定义一个正则表达式$reg ="/xi/";//定义一个字符文本$msg ="xinxisgxagxiagslgxigsghg";//定义替换文本$rep = "oo";//这里使用了全部匹配$str = preg_replace($reg,$rep,$msg);//输出匹配到的全部信息echo $str;
6. 出力結果:
<?php//使用逗号或空格来分隔短语$reg = "/[\s,]+/";//定义原字符串$msg = "hypertext language, programming";$keywords = preg_split($reg,$msg );print_r($keywords);
Array ( [0] => hypertext [1] => language [2] => programming )
1. 正規表現は通常、学習するのが難しく、忘れやすいものです。この知識を読者と共有できれば幸いです。
2. 一定の時間が来るたびに見直します。