PHP 正規表現完全マニュアル
はじめに
正規表現は面倒ですが強力です。学習後に適用すると、効率が向上するだけでなく、絶対的な達成感も得られます。これらの資料を注意深く読み、適用する際に特定の参照を行っている限り、正規表現をマスターすることは問題ありません。
インデックス
1._はじめに
2._正規表現の歴史
3._正規表現の定義
3.1_通常文字
3.2_非印刷文字
3.3_特殊文字
3.4_修飾子
3.5_ロケーター
3.6_選択
3.7_バックリファレンス
4._各種オペレータの動作優先度
5._全記号の説明
6._いくつかの例
7._正規表現一致ルール
7.1_基本パターンマッチング
7.2_キャラクタークラスター
7.3_ 再発決定
1. はじめに
現在、正規表現は *nix (Linux、
Unix など)、HP などのオペレーティング システム、PHP、C#、Java などの開発環境、および多くのアプリケーション ソフトウェアでは、正規表現の影が見られます。
正規表現を使用すると、強力な機能を簡単な方法で実現できます。シンプルで効果的でありながら強力であるために、正規表現コードはより難しく、習得するのが簡単ではないため、使い始めた後は、特定のリファレンスを参照して使用するのが比較的簡単で効果的です。
例:^.+@.+\..+$
このようなコードは私を何度も怖がらせました。おそらく多くの人がそのようなコードを怖がってしまうでしょう。この記事を読み続けると、このようなコードを自由に適用できるようになります。
注: ここのパート 7 は、前の内容と多少重複しているように見えますが、その目的は、これらの内容を理解しやすくするために、前の表の部分を再説明することです。
2. 正規表現の歴史
正規表現の「祖先」は、人間の神経系の仕組みに関する初期の研究に遡ることができます。ウォーレン・マカロックとウォルター 2 人の神経生理学者である Pitts は、これらのニューラル ネットワークを記述する数学的方法を開発しました。
1956年、スティーブン・クリーンという数学者がマカロックとピッツの研究に取り組みました。 初期の研究に基づいて、正規表現の概念を導入した「ニューラル ネットワーク イベントの表現」というタイトルの論文が発表されました。正規表現は、彼が「正規集合の代数」と呼ぶ式を記述するために使用されるため、「正規表現」という用語が付けられています。
その後、この研究は、Ken Thompson の計算探索アルゴリズムを使用して、いくつかの初期の研究に適用できることが判明しました。 Unix の主な発明者。正規表現を最初に実際に応用したのは、Unix の qed エディターでした。
残りは、彼らが言うように、私たちが知っているように歴史です。それ以来、正規表現はテキストベースのエディターや検索ツールの重要な部分となってきました。
3. 正規表現の定義
正規表現(正規表現) 式) は、文字列一致パターンを記述します。このパターンは、文字列に特定の部分文字列が含まれているかどうかを確認したり、一致する部分文字列を置き換えたり、文字列から特定の条件を満たす部分文字列を抽出したりするために使用できます。
ディレクトリをリストする場合は、dir *.txt または ls *.txt の *.txt は正規表現ではありません。ここでの * の意味は正規表現の * とは異なるためです。
正規表現は、通常の文字 (a ~ などの文字) で構成されます。 z) および特殊文字 (メタキャラクターと呼ばれます)。正規表現は、文字パターンと検索文字列を照合するテンプレートとして機能します。
3.1 通常のキャラクター
メタキャラクターとして明示的に指定されていないすべての印刷文字と非印刷文字で構成されます。これには、すべての大文字と小文字のアルファベット、すべての数字、すべての句読点、および一部の記号が含まれます。
3.2 非印刷文字
文字の意味
cx は、x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は A ~ Z または a ~ z である必要があります
1つ。それ以外の場合、c はリテラルの「c」文字として扱われます。
f はフォーム フィード文字と一致します。 x0c および cL に相当します。
n は改行文字と一致します。 x0a および cJ に相当します。
r は復帰文字と一致します。 x0d および cM に相当します。
s は、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。
S は空白以外の任意の文字に一致します。 [^ fnrtv] に相当します。
t はタブ文字と一致します。 x09 および cI に相当します。
v は垂直タブ文字と一致します。 x0b および cK に相当します。
3.3 特殊文字
いわゆる特殊文字は、上記の「*.txt」の * など、特別な意味を持つ文字であり、簡単に言えば、任意の文字列の意味を表します。ファイル名に * が含まれるファイルを検索する場合は、* をエスケープする、つまり * の前に 1 を追加する必要があります。 ls *。TXT。正規表現には次の特殊文字があります。
特殊文字の説明
$ は入力文字列の末尾と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は 'n' または
「r」。 $ 文字そのものと一致させるには、$ を使用します。
( ) は部分式の始まりと終わりを示します。部分式は後で使用するために取得できます。これらの文字と一致させるには、( と ) を使用します。
* 直前の部分式と 0 回以上一致します。 * 文字と一致させるには、* を使用します。
+ 前の部分式と 1 回以上一致します。 + 文字と一致させるには、+ を使用します。
. 改行文字 n を除く任意の 1 文字と一致します。 . と一致させるには、 を使用します。
[ は括弧式の始まりを示します。 [ と一致させるには、[ を使用します。
? 先行する部分式と 0 回または 1 回一致するか、非貪欲修飾子を指定します。 ? 文字に一致させるには、? を使用します。
次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。たとえば、「n」は文字「n」と一致します。 「n」は改行文字に一致します。順序
「\」は「」と一致し、「(」は「(」と一致します。
^ は、角括弧式で使用されない限り、入力文字列の先頭と一致します。角括弧式で使用される場合、文字セットが受け入れられないことを示します。 ^ 文字そのものと一致させるには、^ を使用します。
{ は修飾子式の始まりを示します。 { と一致させるには、{ を使用します。
| 2 つの項目からの選択を示します。 | と一致させるには、| を使用します。
正規表現は、数式を作成するのと同じ方法で作成します。つまり、さまざまなメタ文字と演算子を使用して小さな式を結合し、より大きな式を作成します。正規表現のコンポーネントは、単一の文字、文字のコレクション、文字の範囲、文字間の選択、またはこれらすべてのコンポーネントの任意の組み合わせにすることができます。
3.4予選
修飾子は、一致を満たすために正規表現の特定のコンポーネントが何回出現する必要があるかを指定するために使用されます。 * または + または ? または {n} または {n,} または {n,m} の 6 種類があります。
*、+、および ? 修飾子はすべて、できるだけ多くのリテラルと一致するため、それらの後に ? を追加するだけで非貪欲一致または最小限の一致が実現されます。
正規表現の修飾子は次のとおりです:
キャラクター説明
* 直前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,} に相当します。
+ 前の部分式と 1 回以上一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。 + は次と同等です
{1,}。
? 直前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。 ? に相当
{0,1}。
{n} n は非負の整数です。特定の回数 n 回一致します。たとえば、「o{2}」は「Bob」の「o」とは一致しませんが、「food」には一致します。
オーが2つ入っています。
{n,} n は負ではない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」には一致します。
オールオーズイン。 「o{1,}」は「o+」と同等です。 「o{0,}」は「o*」と同等です。
{n,m} m と n は両方とも非負の整数であり、n
3.5ロケーター
文字列または単語の境界を記述するために使用されます。^ と $ はそれぞれ文字列の先頭と末尾を指し、b は単語の前または後ろの境界を示し、B は単語以外の境界を表します。修飾子はロケーターでは使用できません。
3.6 選ぶ
すべての選択をかっこで囲み、隣接する選択を | で区切ります。ただし、括弧を使用すると、関連する一致がキャッシュされるという副作用が生じます。この場合、最初のオプションの前に ?: を使用すると、この副作用を排除できます。
このうち、?: は非キャプチャ要素の 1 つで、他の 2 つの非キャプチャ要素は ?= と ?! です。これら 2 つは前方参照であり、任意の括弧内の正規表現と一致します。検索文字列は正規表現パターンの任意の位置で一致します。これは、正規表現パターンに一致しない最初の位置で検索文字列と一致する否定先読みです。
3.7 バックリファレンス
正規表現パターンまたはパターンの一部を括弧で囲むと、関連付けられた一致が一時バッファに保存され、キャプチャされた各部分一致が正規表現パターンの左から右に出現したものとして保存されます。部分一致を保存するバッファ番号 1 から始まり、最大 99 個の部分式まで番号付けが続きます。各バッファには「n」を使用してアクセスできます。n は 特定のバッファを識別する 1 桁または 2 桁の 10 進数。
非キャプチャメタ文字「?:」、「?=」、または「?!」を使用して、関連する一致の保存を無視できます。
4. 各種演算子の動作優先順位
同じ優先度の操作は左から右に実行され、異なる優先度の操作は高から低の順に実行されます。さまざまな演算子の優先順位は高いものから低いものまで次のとおりです:
オペレーターの説明
エスケープ文字
()、(?:)、(?=)、[]括弧と角括弧
*、+、?、{n}、{n,}、{n,m} 修飾子
^、$、任意のメタ文字の位置と順序
|「OR」演算
5. すべての記号の説明
キャラクター説明
次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。たとえば、「n」は文字「n」と一致します。 「ん」
改行文字と一致します。シーケンス「\」は「」に一致し、「(」は「(」に一致します。
^ は入力文字列の先頭と一致します。 ^ RegExp オブジェクトの Multiline プロパティが設定されている場合は、「n」または「r」にも一致します
その後の順位。
$ は入力文字列の末尾と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は 'n' または 'r' にも一致します
前の場所。
* 直前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,} に相当します。
+ 前の部分式と 1 回以上一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。 + は次と同等です
{1,}。
? 直前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。 ? に相当
{0,1}。
{n} n は非負の整数です。特定の回数 n 回一致します。たとえば、「o{2}」は「Bob」の「o」とは一致しませんが、「food」には一致します。
オーが2つ入っています。
{n,} n は負ではない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」には一致します。
オールオーズイン。 「o{1,}」は「o+」と同等です。 「o{0,}」は「o*」と同等です。
{n,m} m と n は両方とも非負の整数であり、n
? この文字の直後に他の修飾子 (*、+、?、{n}、{n,}、{n,m}) が続く場合
その後、一致するパターンは貪欲ではなくなります。非貪欲モードは検索文字列の可能な限り少ない部分と一致しますが、デフォルトの貪欲モードは検索文字列の可能な限り多くの部分と一致します。たとえば、文字列の場合、
「oooo」、「o+?」は 1 つの「o」に一致し、「o+」はすべての「o」に一致します。
. は、「n」を除く任意の 1 文字と一致します。 「n」を含む任意の文字と一致するには、「[.n]」のようなパターンを使用します。
(パターン) パターンと一致し、この一致を取得します。取得された一致は、VBScript で生成された Matches コレクションから取得できます。
JScript では SubMatches コレクションを使用し、JScript では $0…$9 プロパティを使用します。括弧文字と一致させるには、「(」または
「)」。
(?:pattern) はパターンに一致しますが、一致結果を取得しません。これは、非取得一致であり、後で使用するために保存されないことを意味します。これは「または」を使用して行われます
文字 (|) は、パターンの一部を結合するのに役立ちます。たとえば、'industr(?:y|ies) は比較です。
'industry|industry' 短い表現。
(?=パターン) 前方参照、任意のパターン一致
検索文字列の先頭と一致します。これは非フェッチ一致です。つまり、後で使用するために一致をフェッチする必要はありません。たとえば、「Windows」
(?=95|98|NT|2000)' は、「Windows 2000」の「Windows」には一致しますが、「Windows」には一致しません。
3.1インチで
"ウィンドウズ"。プリフェッチでは文字は消費されません。つまり、一致が発生した後、次の一致の検索は、プリフェッチを含む文字の後に開始されるのではなく、最後の一致の直後に開始されます。
(?!pattern) 一致しないパターンに対する否定先読み
検索文字列の先頭と一致します。これは非フェッチ一致です。つまり、後で使用するために一致をフェッチする必要はありません。たとえば、「Windows」
(?!95|98|NT|2000)' は、「Windows 3.1」の「Windows」と一致しますが、「Windows」とは一致しません。
2000インチ
"ウィンドウズ"。プリフェッチは文字を消費しません。つまり、一致が発生した後、次の一致の検索は、プリフェッチを含む文字の後に開始されるのではなく、最後の一致の直後に開始されます
x|y は x または y と一致します。たとえば、「z|food」は「z」または「food」と一致します。 '(z|f)ood' は「zood」と一致するか、
"食べ物"。
[xyz] 文字セット。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。
[^xyz] 負の値の文字セット。含まれていない任意の文字と一致します。たとえば、「[^abc]」は「plain」の「p」と一致します。
[a-z] 文字範囲。指定された範囲内の任意の文字と一致します。たとえば、「[a-z]」は「a」から「z」までに一致します。
範囲内の任意の小文字の英字。
[^a-z] 負の文字範囲。指定された範囲内にない任意の文字と一致します。たとえば、「[^a-z]」は「a」から「z」以外のものに一致します。
範囲内の任意の文字。
b は、単語とスペースの間の位置である単語境界に一致します。たとえば、「erb」は「never」の「er」と一致しますが、一致しません。
「動詞」の「えー」。
B は単語以外の境界に一致します。 「erB」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。
cx は、x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は A ~ Z または a ~ z でなければなりません
1つ。それ以外の場合、c はリテラルの「c」文字として扱われます。
d は数字と一致します。 [0-9]に相当します。
D は数字以外の文字と一致します。 [^0-9] と同等。
f はフォーム フィード文字と一致します。 x0c および cL に相当します。
n は改行文字と一致します。 x0a および cJ に相当します。
r は復帰文字と一致します。 x0d および cM に相当します。
s は、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。
S は空白以外の文字に一致します。 [^ fnrtv] に相当します。
t はタブ文字と一致します。 x09 および cI に相当します。
v は垂直タブ文字と一致します。 x0b および cK に相当します。
w は、アンダースコアを含む任意の単語文字に一致します。 「[A-Za-z0-9_]」と同等。
W は単語以外の文字に一致します。 「[^A-Za-z0-9_]」と同等。
xn は n と一致します。n は 16 進数のエスケープ値です。 16 進数のエスケープ値は、正確に 2 桁の長さである必要があります。たとえば、「x41」は「A」と一致します。 「x041」
'x04' & "1" と同等です。 ASCII エンコーディングは正規表現で使用できます。 .
num は num と一致します。ここで、num は正の整数です。取得した一致への参照。たとえば、「(.)1」は、連続する 2 つの同一の文字に一致します。
n は、8 進エスケープ値または後方参照を識別します。 n の前に少なくとも n 個のフェッチされた部分式がある場合、n は後方参照になります。それ以外の場合、n が 8 進数の場合
(0-7) の場合、n は 8 進数のエスケープ値です。
nm は、8 進エスケープ値または後方参照を識別します。 nm の前に少なくとも nm 個の取得可能な部分式がある場合、nm は後方参照になります。もしnm
以前の取得が少なくとも n 回ある場合、n は後方参照であり、その後にリテラル m が続きます。前述の条件がいずれも満たされず、n と m が両方とも 8 進数 (0 ~ 7) である場合、
nm は 8 進エスケープ値 nm と一致します。
nml n が 8 進数 (0 ~ 3) で、m と l が両方とも 8 進数 (0 ~ 7) の場合、8 進数のエスケープ値 nml と一致します。
un は n と一致します。n は 4 桁の 16 進数で表される Unicode 文字です。たとえば、u00A9 は著作権記号と一致します。
(?)。
6. いくつかの例
正規表現の説明
/b([a-z]+) 1b/gi 単語が連続して出現する位置
/(w+)://([^/:]+)(:d*)?([^# ]*)/ URL をプロトコル、ドメイン、ポート、相対パスに解析します
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 章の位置を特定します
/[-a-z]/ A ~ z、合計 26 文字と - 記号。
/terb/ はチャプターに一致しますが、ターミナルには一致しません
/Bapt/ は章に一致しますが、aptitude には一致しません
/Windows(?=95 |98 |NT )/
Windows95、Windows98、または WindowsNT に一致するものが見つかったら、Windows の後ろから次のものを起動します
7. 正規表現一致ルール
7.1 基本的なパターンマッチング
すべては基礎から始まります。パターンは正規表現の最も基本的な要素であり、文字列の特性を記述する文字のセットです。パターンは、通常の文字列で構成される単純な場合もあれば、文字範囲、繰り返し、コンテキストを表すために特殊文字を使用する非常に複雑な場合もあります。例:
^1回
このパターンには特殊文字 ^ が含まれており、パターンが 1 回で始まる文字列にのみ一致することを意味します。たとえば、このパターンは文字列「onceUpona」と一致します。 時間」は「かつて、ある男がいた」 NewYork" は一致しません。 ^ 記号が先頭を示すのと同じように、$ 記号は、指定されたパターンで終わる文字列と一致するために使用されます。
バケツ$
このパターンは、「誰がこの現金をすべて保管していたのか」に似ています。 bucket" は一致しますが、"buckets" とは一致しません。文字 ^ と $ が同時に使用される場合、完全一致を意味します (文字列はパターンと同じです)。例:
^バケツ$
文字列「bucket」にのみ一致します。パターンに ^ と $ が含まれていない場合は、そのパターンを含む任意の文字列と一致します。例: パターン
一度
紐付き
かつてニューヨークから来た男がいました
現金をすべてバケツに入れていた人
一致します。
このパターンの文字 (o-n-c-e) はリテラル文字、つまり文字自体を表しており、数字についても同様です。句読点や白文字 (スペースなど) など、その他の少し複雑な文字 セル、タブなど)、エスケープ シーケンスを使用する必要があります。すべてのエスケープ シーケンスはバックスラッシュ () で始まります。タブ文字のエスケープ シーケンスは次のとおりです。したがって、文字列がタブ文字で始まるかどうかを検出したい場合は、次のようにすることができます。 このモードを使用します:
^t
同様に、「改行」を表すには n を使用し、復帰を表すには r を使用します。他の特殊記号は、前にバックスラッシュを付けて使用できます。たとえば、バックスラッシュ自体は \ で表され、ピリオドは . で表されます。
7.2 キャラクタークラスター
インターネット プログラムでは、通常、ユーザー入力を検証するために正規表現が使用されます。ユーザーがフォームを送信するとき、入力された電話番号、住所、電子メール アドレス、クレジット カード番号などが有効かどうかを判断するには、通常のリテラル文字を使用するだけでは十分ではありません。
したがって、必要なパターンを記述するために、より自由な方法、つまり文字クラスターを使用する必要があります。すべての母音文字を表すクラスターを作成するには、すべての母音文字を角かっこで囲みます:
[あああああ]
このパターンは任意の母音文字に一致しますが、表すことができるのは 1 つの文字のみです。次のような文字範囲を表すにはハイフンを使用します:
[a-z] // すべての小文字と一致します
[A-Z] // すべての大文字と一致します
[a-zA-Z] // すべての文字と一致します
[0-9] // すべての数字と一致します
[0-9.-] // すべての数字、ピリオド、マイナス記号と一致します
[ frtn ] // すべての白い文字と一致します
繰り返しますが、これらは非常に重要な 1 つの文字を表しているだけです。 「ab2」、「r2d3」ではなく、「z2」、「t6」、「g7」などの小文字と数字で構成される文字列を一致させたい場合 または「b52」の場合は、次のパターンを使用します:
^[a-z][0-9]$
[a-z]は26文字の範囲を表しますが、ここでは最初の文字が小文字である文字列にのみ一致します。
^ は文字列の先頭を表すと前述しましたが、別の意味があります。 ^ が一連の角括弧内で使用される場合、それは「しない」または「除外する」を意味し、特定の文字を削除するためによく使用されます。前の例を使用すると、最初の文字を数字にすることはできません:
^[^0-9][0-9]$
このパターンは、「&5」、「g7」、および「-2」には一致しますが、「12」および「66」には一致しません。特定の文字を除外する例をいくつか示します:
[^a-z] //小文字を除くすべての文字
[^\/^] //()(/)(^) を除くすべての文字
[^"'] //二重引用符 (") と一重引用符 (') を除くすべての文字
特殊文字「。」 (ドット、ピリオド) は、「改行」を除くすべての文字を表すために正規表現で使用されます。したがって、パターン「^.5$」は、数字の 5 で終わり、「改行」以外の他の文字で始まる任意の 2 文字の文字列と一致します。パターン「.」は、空の文字列と「改行」のみを含む文字列を除く、任意の文字列と一致します。
PHP の正規表現にはいくつかの組み込みの共通文字クラスターがあり、リストは次のとおりです:
文字クラスターの意味
[[:alpha:]] 任意の文字
[[:digit:]] 任意の数字
[[:alnum:]] 任意の文字と数字
[[:space:]] 任意の白文字
[[:upper:]] 任意の大文字
[[: lower:]] 任意の小文字
[[:punct:]] 任意の句読点
[[:xdigit:]] [0-9a-fA-F] に相当する任意の 16 進数
7.3 再発の判定
文字または数字を照合する方法はすでに理解しましたが、多くの場合、単語または数字のグループを照合したい場合があります。単語は複数の文字で構成され、数字のグループは複数の単数で構成されます。文字または文字クラスターに続く中括弧 ({}) は、前のコンテンツが繰り返される回数を決定するために使用されます。
文字クラスターの意味
^[a-zA-Z_]$ すべての文字とアンダースコア
^[[:alpha:]]{3}$ 3 文字の単語すべて
^a$ 文字 a
^a{4}$ ああ
^a{2,4}$ aa、aaa または aaaa
^a{1,3}$ a,aa または aaa
^a{2,}$ 2 つ以上の a を含む文字列
^a{2,} など: ツチブタと aaab、ただし apple は除く
a{2,} 例: baad と aaa、ただしナンタケット島ではありません
t{2} 2 つのタブ文字
.{2} 2 文字すべて
これらの例では、中括弧の 3 つの異なる使用法を説明します。数値 {x} は、「前の文字または文字クラスターが x 回のみ出現する」ことを意味し、数値にカンマを加えたもの、{x,} は「前のコンテンツが出現する」ことを意味します。 x 回以上」; カンマで区切られた 2 つの数字、{x,y} は、「前のコンテンツが少なくとも x 回、ただし y 回以上出現しない」ことを意味します。パターンをさらに多くの単語または数字に拡張できます :
^[a-zA-Z0-9_]{1,}$ //複数の文字、数字、またはアンダースコアを含むすべての文字列
^[0-9]{1,}$ //すべての正の数
^-{0,1}[0-9]{1,}$ //すべての整数
^-{0,1}[0-9]{0,}.{0,1}[0-9]{0,}$ //すべて 10 進数
最後の例は理解するのが簡単ではありませんね。このように見てください。すべてがオプションの負符号 (-{0,1}) (^) で始まり、その後に 0 個以上の数字 ([0-9]{0,}) が続き、 オプションの小数点 (.{0,1}) の後に 0 個以上の数字 ([0-9]{0,}) が続き、それ以外は何もありません ($)。以下では、使用できるより簡単な方法について説明します。
特殊文字「?」は {0,1} に相当し、両方とも「0 または 1 個前のコンテンツ」または「前のコンテンツはオプション」を表します。したがって、今の例は次のように簡略化できます:
^-?[0-9]{0,}.?[0-9]{0,}$
特殊文字「*」は {0,} に等しく、どちらも「0 個以上前のコンテンツ」を表します。最後に、文字「+」は次と同じです。 {1,} は等しく、「1 つ以上の前のコンテンツ」を意味するため、上記の 4 つの例は次のように記述できます:
^[a-zA-Z0-9_]+$ //複数の文字、数字、またはアンダースコアを含むすべての文字列
^[0-9]+$ //すべての正の数
^-?[0-9]+$ //すべての整数
^-?[0-9]*.?[0-9]*$ //すべて 10 進数
もちろん、これによって技術的に正規表現の複雑さが軽減されるわけではありませんが、正規表現が読みやすくなります。
詳細なソース参照: http://www.jb51.net/article/26215.htm
一重引用符と / は、通常のテンプレートの包含文字として使用できます。これは、たとえば、コンテンツを一重引用符と一致させるために使用することもできます。テンプレートを含めるには一重引用符を使用し、/ または # を使用するとテンプレートを簡素化できます。それ以外の場合は、テンプレート内の一重引用符の前にエスケープ文字を追加する必要があります
最後の i は大文字と小文字を区別しないことを意味します。大文字と小文字を区別するため、 s は全文一致として理解できます。つまり、一致したコンテンツに改行がある場合は、このスイッチを追加するのが最善です
テンプレートでは、 \s はスペースを意味します
私は正規表現の専門家です。これを教えるための特別な本があります。QQ1389951 に聞いてください。笑。
http://www.bkjia.com/PHPjc/851758.html