正規表現 - マッチングルール2024 年の最新の入門チュートリアル。このコースでは 基本パターンマッチング,キャラクタークラスタ,[OK]を繰り返し, について学習できます。
すべては、基本から始め。 パターンは、正規表現は文字のグループを説明する文字列によって特徴づけられる最も基本的な要素、です。 モードは、通常の文字列からなる、非常に単純なものも非常に複雑になることが、しばしば繰り返され、特殊文字と文字の範囲を表す、またはコンテキストを表します。 例えば:
^once
このモデルは、パターンは専用の文字列で始まるものを一度一致していることを示す、特殊文字^が含まれています。 例えば、パターン文字列は、「かつては「一致」とは、かつてアメリカニューヨークから来た男があった」と一致していません。 このような^シンボルとして与えられたモードの終了時にこれらの文字列を一致させるために同じ、$記号の始まりを示します。
bucket$
試合 "バケツにこの現金のすべてを保っ」モデルとは「バケット」と一致していません。 ^と$文字を同時に使用した場合、それは完全一致(のような文字列モード)を表します。 例えば:
^bucket$
文字列のみ「バケット」と一致します。 モデルは^と$が含まれていない場合は、パターンのいずれかに一致する文字列が含まれています。 たとえば、次のモード
once
文字列と
There once was a man from NewYork Who kept all of his cash in a bucket.
試合。
このモードでの文字は(1回)つまり、彼らは文字自体は、数字が同じであることを特徴とする、リテラル文字です。 このような句読点や白文字(スペース、タブなど)などのいくつかの他の少し複雑な文字は、エスケープシーケンスを使用します。 すべてのエスケープシーケンスは、バックスラッシュ(\)で始まります。 タブは、エスケープシーケンスです:\ tの。 私たちは、文字列がタブで始まるかどうかをテストしたいのであれば、あなたは、このモードを使用することができます。
^\t
同様に、\ n」は改行 "、\ rキャリッジリターンによって表されます。 その他の特殊記号は、\\でバックスラッシュ自体として、バックスラッシュの前に使用することができる期間は語った。\で。表現、というように。
インターネットでのプログラムは、正規表現は、多くの場合、ユーザー入力を検証するために使用されます。 ユーザーがフォームを送信すると、あなたが判断する電話番号、住所、Eメールアドレスを入力してくださいリテラルに基づいて、一般的な文字が十分でないと、クレジットカード番号は、有効です。
それで、我々のアプローチを説明するために、より自由なモデルを使用するためには、文字のクラスタです。 すべての母音クラスタの文字表現を作成するには、角カッコ内の母音の文字のすべてを置きます:
[AaEeIiOoUu]
このパターンは、任意の母音の文字に一致しますが、唯一の文字を表します。 ハイフンのような文字の範囲を表すことができます。
[a-z] //匹配所有的小写字母 [A-Z] //匹配所有的大写字母 [a-zA-Z] //匹配所有的字母 [0-9] //匹配所有的数字 [0-9\.\-] //匹配所有的数字,句号和减号 [ \f\r\t\n] //匹配所有的白字符
同様に、これらは、唯一の文字を表し、これは非常に重要です。 あなたは小文字と1このような「Z2」、「T6」または「G7」などの数字の1つの文字列によってではなく、「AB2」、「r2d3」または「B52」を一致させたい場合は、このパターンを使用します。
^[a-z][0-9]$
範囲の26文字の代わりに[AZ]が、しかしここでは、それは最初の文字が小文字の文字列マッチングであるのみです。
前述したように、^文字列の先頭を表し、それはまた別の意味を有します。 角括弧のセットで使用する場合^それは多くの場合、文字を除去するために使用される「ない」または「除外」の手段を意味するということです。 また、前述の例を使用し、我々は最初の文字は数字にすることはできません尋ねます:
^[^0-9][0-9]$
このモードは "&5」、「G7」と「-2」一致しているが、「12」と、「66」が一致ではありません。 ここでは除外する特定の文字のいくつかの例は以下のとおりです。
[^a-z] //除了小写字母以外的所有字符 [^\\\/\^] //除了(\)(/)(^)之外的所有字符 [^\"\'] //除了双引号(")和单引号(')之外的所有字符
特殊文字「。」(ドット、フルストップ)は、正規表現では、すべての文字の「新しい行」に加えを表すために使用されます。 だから、パターン "^ 0.5の$」と数5の端部との開始時に他の非「改行」文字での一致文字列に任意の2文字。 モード。 ""空の文字列に加えて、任意の文字列に一致する、とだけ含まれてすることができます "改行"文字列を。
次のようにPHPの正規表現がいくつか組み込まれている汎用文字クラスタ、リストは次のとおりです。
字符簇 | 描述 |
---|---|
[[:alpha:]] | 任何字母 |
[[:digit:]] | 任何数字 |
[[:alnum:]] | 任何字母和数字 |
[[:space:]] | 任何空白字符 |
[[:upper:]] | 任何大写字母 |
[[:lower:]] | 任何小写字母 |
[[:punct:]] | 任何标点符号 |
[[:xdigit:]] | 任何16进制的数字,相当于[0-9a-fA-F] |
今までは、あなたはすでに文字または数字を一致させる方法を知っているが、より多くのケースでは、あなたが単語や数字のセットと一致することができます。 単語は文字の数、奇数のいくつかの数字のグループがあります。 中括弧のクラスターの背後にある文字または文字で({})先行するコンテンツの反復の数を決定するために使用されます。
字符簇 | 描述 |
---|---|
^[a-zA-Z_]$ | 所有的字母和下划线 |
^[[:alpha:]]{3}$ | 所有的3个字母的单词 |
^a$ | 字母a |
^a{4}$ | aaaa |
^a{2,4}$ | aa,aaa或aaaa |
^a{1,3}$ | a,aa或aaa |
^a{2,}$ | 包含多于两个a的字符串 |
^a{2,} | 如:aardvark和aaab,但apple不行 |
a{2,} | 如:baad和aaa,但Nantucket不行 |
\t{2} | 两个制表符 |
.{2} | 所有的两个字符 |
これらの例は、3つの異なる中括弧の使用方法について説明します。 数、{X}を意味する「クラスタの前の文字または文字のみx回表示されます ";数のカンマを、{xは、}"コンテンツが倍xまたはそれ以上の数の前に表示されます "を意味し、2とコンマことを、数字を分離{X、Y}「少なくともX回出現の前の内容ではなく、yの倍以上。」 私たちは、複数の単語や数字にモデルを拡張することができます。
^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 ^[1-9][0-9]*$ //所有的正数 ^\-{0,1}[0-9]{1,}$ //所有的整数 ^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数
最後の例はよく理解されていないが、そうではありませんか? だから、神庭:(?[ - ])(。\)とオプションのマイナス記号を持つすべて1桁以上の数字([0-9] +)、および小数点に続く最初(^)で、トーク1桁以上の数字([0-9] +)に、そして何か($)が続いていません。 あなたは知っているであろう、以下でより単純な方法を用いることができます。
"?": "0または1の前に」または「コンテンツの前に任意である。」と特殊文字{0,1}等しく、それらが表します だから例は次のように簡略化することができます。
^\-?[0-9]{1,}\.?[0-9]{1,}$
特殊文字「*」と{0、}等しく、それらはすべて「0または先行するコンテンツの多くを。」を表します 最後に、文字「+」及び{1}等しく、それは、「先行するコンテンツの1以上」を示すので、上記の4つの例は、のように書くことができます。
^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 ^[0-9]+$ //所有的正数 ^\-?[0-9]+$ //所有的整数 ^\-?[0-9]*\.?[0-9]*$ //所有的浮点数
もちろん、これは基本的に、正規表現の技術的な複雑さを減らすことはありませんが、読み取りに容易にすることができます。