Latest web development tutorials

正規表現 - マッチングルール

基本パターンマッチング

すべては、基本から始め。 パターンは、正規表現は文字のグループを説明する文字列によって特徴づけられる最も基本的な要素、です。 モードは、通常の文字列からなる、非常に単純なものも非常に複雑になることが、しばしば繰り返され、特殊文字と文字の範囲を表す、またはコンテキストを表します。 例えば:

^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]

[OK]を繰り返し

今までは、あなたはすでに文字または数字を一致させる方法を知っているが、より多くのケースでは、あなたが単語や数字のセットと一致することができます。 単語は文字の数、奇数のいくつかの数字のグループがあります。 中括弧のクラスターの背後にある文字または文字で({})先行するコンテンツの反復の数を決定するために使用されます。

字符簇 描述
^[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]*$ //所有的浮点数

もちろん、これは基本的に、正規表現の技術的な複雑さを減らすことはありませんが、読み取りに容易にすることができます。