ホームページ >バックエンド開発 >PHPチュートリアル >正規表現の基本的な分析例の詳細

正規表現の基本的な分析例の詳細

王林
王林転載
2019-08-29 11:57:422301ブラウズ

正規表現は検証でよく使用されます。正規表現をもっと簡単に理解する方法を紹介しましょう。
まず最初に、通常の名前のネーミングについて話しましょう。

という言葉は誰もがよく知っていると思います。 "正規表現"。 Regular Expression の「 Regular 」は、一般的に「正規の」、「正規の」、「従来の」などと訳されます。ここでいう「正規」とは「規則」「規則性」という意味で、正規表現とは「ある規則を記述した表現」のことで、いわゆる正規表現です。実際、正規表現は特定の動作を規制するために使用されます。つまり、交通ルールを守らなければならないのと同じような制約です。
通常ルールの理解と理解は難しくないと個人的には感じています!覚えておくべきことをいくつか追加して、柔軟に使用するだけです。 ###わかりました!次に、規則性の本体について詳しく説明します。
まず、規則性の重要な点を見てみましょう。これらのことを理解できれば!通常、プロジェクトには問題はありません。

最初の "\"これは一般にエスケープ文字として知られており、文字を特殊文字またはリテラル文字としてマークします。たとえば、「n」は「n」と一致します。 「\n」の場合は改行文字です。
スラッシュ「\」だけを書きたい場合はどうすればよいか、誰かが尋ねるはずです。これもとても簡単です!このように「\\」と書くだけです!なぜ「\\」を2つ書くのか!ただ区別するためです。

2 番目の "^"これは一般に開始文字として知られており、正規表現を作成する準備ができたことを意味します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は "\n" または "\r" の後の位置にも一致します。

3 番目の "$"これは一般に終了文字として知られており、エンディングとも言えます (非常に専門的ではない説明)。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は "\n" または "\r"

の前の位置にも一致します。4 番目の "*"これは前の位置と一致します。 1 つの 0 個以上の部分式。例: zo* は、「z」と「zo」または「zoo」に一致します。この "*" は、{0,}

と同等です。5 番目の " " は、前の部分式と 1 回以上一致します。たとえば、「zo」は「zo」と「zoo」または「zooo」に一致します。この「*」と「」はほぼ同じで、一方は0回から始まり、もう一方は1回から始まります。この「 」は {1,} に相当します。

6 番目の "?"これは、前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」と一致します。この疑問符は、0 回一致するか 1 回一致することを意味します。

7 番目の「{}」この記号は何回一致しますか?
1,{n} は特定の回数 n 回一致します。n は非負の整数 (例: "o{2}") は、good、food など、2 つの "oo" と一致することを意味します。ただし、o が 1 つしかないため、body と一致させることはできません。
2,{n,} は少なくとも n 回一致します。n は、「o{2,}」などの負ではない整数です。これは、good、good、などの 2 つ以上の「oo」と一致することを意味します。よし、など。 「o{1,}」は「o」と同等です。 「o{0,}」は「o*」と同等です。
3,{n,m} は最小 n 回一致、最大 m 回一致です。n と m は両方とも非負の整数であり、n

8 番目の「?」の特殊な使用法この文字が他のリミッター (*, ,?, {n}, {n, }, {n) の直後にある場合,m})、一致パターンは貪欲ではありません。いわゆる非貪欲モードは、最小限の方が良いことを意味します。非貪欲モードは、可能な限り少ない検索文字列と一致しますが、デフォルトの貪欲モードは、可能な限り多くの検索文字列と一致します。たとえば、文字列「oooo」の場合、「o ?」は単一の「o」と一致しますが、「o」はすべての「o」と一致します。

9 番目の「.」は、改行文字「\n」を除く任意の 1 文字と一致します。改行文字「\n」内の任意の文字と一致する場合は、「(.|\n)」パターンを使用します。

10番目の「パターン」この「パターン」がわかりにくく、初見では戸惑いました!ただし、これについての私の理解は次のとおりであり、皆様のお役に立てば幸いです:
1. ?:pattern はパターンと一致しますが、一致する結果は得られません (例: k(?:1|2|3) k) 123 のいずれかに一致します (例: k1|k2
2) ?=パターン ポジティブポジティブプレビュー 例: K(?=1|2|3) K が 123 のいずれかに一致する場合に K を選択します 例: k1 の k またはk# in k2 ##3. ?! パターンの前方ネガティブ プレビュー。例: k(?!1|2|3) K が 123 のいずれにも一致しない場合は、K を選択します。例: k1 の k と一致しませんが、 ?<=pattern 逆ポジティブ事前チェック、例: (?<=1|2|3)k K が 123 のいずれかに一致する場合、K を選択します。例: k in 1k または k in 2k K
5. ? になる可能性があります

11 番目の "|"
この記号は、または、たとえば: "f|good" は "f" または "good" と一致しますが、この場合はどうなるかを意味します。"(f|good) g)ood」は「food」または「good」と一致します。

12 番目の「[]」
この記号は文字セットの合計を意味します。「{}」と似ていますが、意味は大きく異なります。

13 番目の "()"
このシンボリック配列またはセット

1, [xyz] は、含まれる任意の文字と一致します。つまり、3つの中から1つを選択します。例: 「[abc]」は「company」の「a」と一致しますが、2 つの文字が使用されているため「Beautiful」と一致できません。
2. [^xyz] これは否定文字のセットであり、「非」とも言えます。例: 「[^abc]」は「drop」などと一致します。単語に「abc」の文字が含まれていない限り、問題ありません。
3. [a-z] 文字範囲。指定された範囲内の任意の文字と一致します。たとえば、「[a-z]」は、「a」から「z」の範囲内の任意の小文字の英字と一致します。 「[0-9]」と書くこともでき、これは 0 から 9 までの数字に直接一致します。
4. [^a-z] 誰もがそれが何を意味するのか知っておくべきであることは言うまでもないことだと思います! それはあなたが考えていることを意味します: 最初は「a」から「z」の範囲にない任意の文字これを見たとき、aとzの間ではない文字だと思いました!中国語では、a から z の間に文字がなければ「ü」だけがあると言いました。これは「ゆ」と読むそうですよ!ふふ!誰でもはっきりとわかります!それは文字ではなく文字です。

「\」と文字の特別な意味を見てみましょう
「\b」は単語と一致する境界、つまり単語とスペースの間の位置を意味します。たとえば、「er\b」は「never」の「er」と一致しますが、「verb」の「er」とは一致しません。こちらの方が覚えやすいと思いますので、「境界の端はbから始まる!」と覚えておくと良いでしょう。
"\B" は "\b" の逆で、単語以外の境界に一致します。 「er\B」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。
"\d" はより頻繁に使用されます。これは [0-9] に相当する数字と一致します。
「\D」も分かりやすいですが、数字ではないという逆の意味もあり、[^0-9]と同等です。
"\f" はフォーム フィード文字と一致します。これに関しては、あまり説明する必要はありませんね!以下の4つは多すぎて説明しきれないほどです。覚えておいてください!プロジェクトで使用してください。
"\n" は改行文字と一致します。
"\r" は復帰文字と一致します。
"\t" はタブ文字と一致します。
"\v" は垂直タブ文字と一致します。
"\s" は、任意のヌル文字と一致し、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 [ \f\n\r\t\v] と同等。つまり、これには上記の5つがすべて含まれています。
"\S" は、[^ \f\n\r\t\v] と同等の非空白文字です。
そういえば、レギュラールールって実はこのキャラたちだったんじゃないかと誰もが感じるかもしれませんね!そして、誰もが柔軟に使用できる限り、論理的思考によって推測できるものもあれば、繰り返し使用できるものもあります。

"\w" は、アンダースコアを含む任意の単語文字に一致します。 「[A-Za-z0-9_]」に相当します。これは実際によく使われるので、覚えておくことをお勧めします。

"\W" は単語以外の数字に一致します。 「[^A-Za-z0-9_]」と同等。 ######わかりました!基本的に、覚えておく必要があるのはこれだけです。正規表現の達人の中には「全然完成してないのでは?」と言う人もいるかもしれませんが、あらかじめ説明しておきますが、ここで書いたのはプロジェクトでよく使われる基本的なものだけで、より実践的なものです。基本的にはプロジェクトで使用できます。 . ご自由にお使いください。

次に、全員で実質的な作業を行い、正規表現を解析してみましょう。

たとえば、次の通常のルール: ^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5] ][0 -9])$
通常の正規表現の専門家なら、それが何であるか一目でわかると思います。もちろん、論理的思考が得意な人の中には、二回見ただけでこれが何であるかを理解する人もいます。はい、それは時間の法則です。

OK この「^」から始まるこの正規表現を分析しましょう。「([0-1]?[0-9]|2[0-3])」はグループです、「[0-1]」 ]?" この疑問符の機能は、0 または 1 が最大 0 個または 1 個存在できることです。「[0-9]」は 0 から 9 までの任意の数値です。「|」は「または」を意味します。 「[ 0-1]?[0-9]」ではなく「2[0-3]」です。「2[0-3]」は最初の 2、つまり 2、最後の 0 ~ 3 はいずれか 1 つです0 から 3 までの数値。「:」は「:」を意味します。「([0-5][0-9])」もグループです。「[0-5]」は 0 から 5 までの任意の数値です。 「[0-9]」は0から9までの任意の数字、「:」も本来の意味、「([0-5][0-9])」もグループ、「[0-5]」は0 ~ 5 の任意の数値。「[0-9]」は 0 ~ 9 の任意の数値、「$」はターミネータです。

みんなで小数を分析しましょう

例: ^[1-9] \d*(\.[0-9]{1,2})?|0(\.[0-9]{1,2})?$
"^" は開始文字、"[1-9]"、" " は 1 から 9 までの少なくとも 1 つ以上を意味します、"\d*"、この "\d" は数字、この "*" は少なくとも 0 個の数値または複数の数値、「(\.[0-9]{1,2})?」 このグループでは、「\.」が元の点、「[0-9]{1,2}」です。 「0 から 9 までの間に数字が 1 つまたは 2 つあります。その後ろにある疑問符「?」は、数字「(\.[0-9]{1,2})」が 0 つまたは 1 つあることを意味します。 "|" は "[1-9] \d*(\.[0-9]{1,2})?" または "0(\.[0-9]{1,2})?" のいずれかです。 。 "0(\.[0-9]{1,2})?" このグループの 0 が本来の意味で、このグループの "(\.[0-9]{1, 2})?」が本来の意味です。 本来の意味は、「[0-9]{1,2}」です。 0から9の間に数字が1つまたは2つあり、その後ろに疑問符「?」があることを意味します。 0 または 1 つの「(\.[0-9 ]{1,2})」。

以下に、一般的な正規表現の例をいくつか示します。

^[1-9]\d*$ //正の整数に一致
^-[ 1-9]\ d*$ //負の整数に一致
^-?[1-9]\d*$ //整数に一致
^[1-9]\d*|0$ //負でない整数に一致 (正の整数 0)
^-[1-9]\d*|0$ //正でない整数 (負の整数 0) に一致
^[1-9]\d*\.\ d*| 0\.\d*[1-9]\d*$ //正の浮動小数点数と一致
^-([1-9]\d*\.\d*|0\.\d* [1 -9]\d*)$ //負の浮動小数点数と一致
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d * |0?\.0 |0)$ //浮動小数点数と一致
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0 ?\.0 |0$ //非負の浮動小数点数(正の浮動小数点数0)と一致します
^(-([1-9]\d*\.\d*|0\.\d* [1- 9]\d*))|0?\.0 |0$ //非正の浮動小数点数(負の浮動小数点数 0)と一致
^[a-zA-Z][a-zA -Z0-9_]{ 4,15}$ //一致するアカウントが合法かどうか (文字で始まり、5 ~ 16 バイトが許可され、英数字のアンダースコアが許可されます)
^\s*|\s*$ //通常最初と最後の空白文字に一致する式
\n\s*\r //空白行に一致する正規表現
[^\x00-\xff] //2 バイト文字 (中国語文字を含む) に一致
[\u4e00-\ u9fa5] //中国語の文字に一致する正規表現

ユーザー名
^[a-z0-9_-]{3,16}$

パスワード
^[a -z0-9_-]{6,18}$

16 進値
##?([a-f0-9]{6}|[a-f0-9]{3 })$

メール
^([a-z0-9_\.-] )@([\da-z\.-] )\.([a-z\.]{2, 6 })$
^[a-z\d] (\.[a-z\d] )*@([\da-z](-[\da-z])?) (\.{1,2} [ a-z] ) $

URL
^(https?:\/\/)?([\da-z\.-] )\.([a-z\.]{2,6} ) ([\/\w \.-]*)*\/?$

IP アドレス
((2[0-4]\d|25[0-5]|[01] ? \d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

または
^ (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(? : 25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

HTML タグ
^< ([a-z] )([^<] )*(?:>(.*)<\/\1>|\s \/>)$

上記は通常のルールに関するものです表現の基礎知識を具体例を交えて解説していますので、正規表現に戸惑う学生の参考になれば幸いです。間違いがあればご指摘ください。

その他の関連する質問については、PHP 中国語 Web サイトをご覧ください: PHP ビデオ チュートリアル

以上が正規表現の基本的な分析例の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。