[正規表現] - 10 の非常に一般的な正規表現のケース、扱いやすい正規表現

正規表現は、特別な意味を持つ文字で構成される文字列であり、主に規則を満たす文字列を検索して置換するために使用されます。フォームの検証や URL マッピングなどでよく使用されます。

正規表現を記述する場合、パターンを//スラッシュのペアに記述する必要があります

/正则表达式/匹配模式

インターネット上の概念のほとんどは正規表現に関するもので、あいまいで覚えにくいものです. 最初にこれらの概念を無視して、フロントエンドで非常に一般的に使用される正規表現の 10 のケースを直接学習しましょ. , 私は使用します.赤い太字のフォントは、それが何を意味する正規表現を意味するかを強調しています.正規表現を書く。最後に、記事の最後に正規表現の概要を添付して、誰もが学んだことを統合できるようにします。それでは早速始めましょう!


1. 携帯電話番号を一致させる

1. 携帯電話番号には 1 で始まる特殊文字があることがわかっています。正規表現では、^ は先頭を意味します。、それで:

/ ^1 /

2. 2 桁目は通常、3、4、5、7、8 のいずれかの数字です。[] を使用して一致させます。[ ]内の数字は、1 つの数字だけが一致することを意味します。以下のように、2桁目として3,4,5,7,8のうち1つの数字だけが一致することを意味します。

/^1 [34578] /

3. 次はすべて 0 から 9 までの数字です。

携帯電話番号は 11 桁で、2 桁を確認したので、まだ 9 桁が確定していません。\dは数字を表します。

{m}は m 個の記号に一致することを意味し、{9} は 9 つの数字に一致することを意味します。

厳密にするために、末尾に$を追加します。これは、9 つ​​の数字で終わることを意味します。

/^1[34578] \d{9}$ /

4. 最後に、スラッシュの後にgを追加して、グローバル一致を示します。つまり、最初の一致と終了ではなく、文字列の内容全体を検索します。

/^1[34578]\d{9}$/ g


2.QQ番号

Qq番号も比較的一般的です。

1. QQ 番号の最初の数字は 0 にすることはできないため、0 ~ 9 であり、[1 ~ 9]は 1 ~ 9 から 1 つを選択することを意味します。

/ ^[1-9] /g

[xxx-xxx] は省略形で、26 個の小文字を一致させるなど、[a|b|c|d|e|f|g|h|i....] と記述してa または b または c に一致させることができます。や d... のように書くのは非常に面倒ですが、[az]と書くことができます。これは、すべての小文字に一致することを意味し、すべての大文字と小文字は次のように書くことができます: [a-zA- Z ] . 注: [] には 1 文字のみが一致します

2. 現在、qq は最大 10 桁、最小 5 桁です. {4,9}を使用して、4 と 9 を含む 4 ~ 9 の数字を照合します。つまり、一致間隔は [4,9] です。

/^[1-9] [1-9]{4,9} /g

ここで、次のようにも記述できます。

/^[1-9] /d{4,9} /g


三、色の16進数表現の仕方

色を 16 進数で表現することも、Web 開発では非常に一般的です。

1. 最初に記号 # が先頭にあり、次に 0 ~ 9、a ~ f、A ~ F の 6 文字、つまり [0-9a-fA-F] になります。

/ #[0-9a-fA-F]{6} /g

2. 16 進法は省略できる場合があるため、まだ終わりではありません.2 つの文字が同じ場合は、3 桁の文字に省略されます.例: #ccaaff は #caf になり、#FFFFFF は #FFF になります.

この 2 つの状況があるため、 「または」を表すために|記号を使用する必要があります。

/#[0-9a-fA-F]{6} |[0-9a-fA-F]{3} /g

3. しかし、これらの 2 つのケースは # で始める必要があります。2 つの数式に # を追加したくありません。これら 2 つのケースに括弧 () を追加するだけでよく、# 記号スパイシーしか記述できませ ( ) はグループ化を意味します。

/# ( [0-9a-fA-F]{6}|[0-9a-fA-F]{3} ) /g

 4. ユーザーが # を入力しない場合がありますが、ここでは?を使用します。不要であることを示します。

/# ? ([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g


4. メールボックス

サーバーがユーザーにメールボックス名のカスタマイズを許可する形式も異なります. 一般的なメールボックス ルールを例として取り上げます:

1. ユーザーが入力できるメールボックス名には、すべての大文字と小文字、すべての数字、および 3 つの記号 _- が含まれます。

/ ^[A-Za-z0-9_-.] /g

2. 次の理由により、まったく一致しないことがわかります。

-括弧内の記号はもともと範囲を表すために使用されていたもので, 今では文字をエスケープする必要があります. エスケープするにはエスケープ記号\を使用する必要があります. さらに, . 記号もエスケープする必要があります.式、改行以外の任意の文字を意味します。

/^[A-Za-z0-9_ \ - \ .]/g

3. 文字数を定義できるようになりました. 原則として, ユーザーの文字数を制限する必要があります. 、少なくとも 1 回は 0 文字を設定できません

/^[A-Za-z0-9_\-\.] + /g

4.次に@があり、ドメイン名は@文字の後ろにあり、ドメイン名はマルチレベルのドメイン名にすることもできます.今すぐその部分を直接取ることができます.

/^[A-Za-z0-9_\-\.]+ @ [A-Za-z0-9_\-\.]+ /g

5. 後者の部分は、一般的な .com または .cn であり、\. で表す必要があるトップ レベル ドメイン名です。 2 ~ 4 文字で構成されます。$で終わる

/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]+ \. [A-Za-z]{2,6} $ /g


5. URL

メールアドレスみたいなものがURL 

1. URL の先頭はプロトコル、つまり http または https です。ftp またはファイルの場合もあり、その後にコロンと 2 つの / 記号が続きます。

 / ^(https?|ftp|ファイル):\/\/ /g

上のもの?http と https に一致するように、前の文字、つまり s にのみ作用します。

覚えていませんか?それが何を意味するのかを明らかにしてください、私はちょうどそれを言いました!

2. 通常、URL を入力する場合、同意書は書かれていないことが多いため、? を追加する必要があります。シンボル

 /^ ( (https?|ftp|ファイル):\/\/ )? /g

3.次に、権限のあるドメイン名の一部を書きます。最初に括弧を使用してグループ化します。ここでの権限のあるドメイン名は、メイン ドメイン名と呼ばれることが多い bilibili を指し、メイン ドメイン名の前に www を付けます。ユーザーは必ずしも入力する必要はなく、必ずしも It であるとは限らず、それは他の記号でもよいため、一緒に www.bilibili を見ることができます. 小文字と数字に加えて、この部分には . 記号と - 記号も含まれる場合があります.

 /^((https?|ftp|ファイル):\/\/)? ([\da-z\.\-]+) /g

4. 後半は弊社メールアドレスとほぼ同じです

 /^((https?|ftp|ファイル):\/\/)?([\da-z\.\-]+) \.[az\.]{2,6} /g

5. URL は大文字と小文字が区別されませんが、通常はすべて小文字で指定されます。

ドットは、com.cn などの特殊な状況を避けるためのものです。URL の最後の共通部分もあります.たとえば、ホームページのいずれかの部分にアクセスすると、非常に長いまたは短い特定のリソースアドレスが生成されるため、可能な限りカバーする必要があります. 、/ 記号、. 記号、および - 記号が表示される場合があります。したがって、 ([\/\x\.\-])と書きます\w は、英数字やアンダースコアを含む任意の文字を含むことを意味します。* は0 から無限大を意味するため、このようなリソース グループが複数存在する可能性があるため、周辺に * を追加します。これは、Web ページで一般的です...../.../.../

 /^((https?|ftp|file):\/\/)?([\da-z\.\-]+)\.[az\.]{2,6} ( [\/\w\ .\-]* )* /g

6. 最後に、ユーザーは / 記号を入力することもできます。0 または 1 の場合があります。

 /^((https?|ftp|ファイル):\/\/)?([\da-z\.\-]+)\.[az\.]{2,6}([\/\w\ .\-]*)* \/?$ /g


6. HTML タグ

HTMLタグのマッチングも非常に便利で、たとえば文章の開始位置を特定したい場合は、クローラーにも使用できます。

1. < の先頭といくつかの小文字を一致させます。

/^<([az]+)/g

 それでもこの会議を理解できず、少し混乱している場合は、それは理にかなっていないので、急いで見直してください!

2. 次に、最後に m を追加して、複数の行に一致させます。

/^<([az]+)/g m

3. ラベルには多くの属性が含まれる可能性があることがわかっています。そのような長い属性の形式を表すために長い正規表現を記述する必要はありません。これは、> 記号の前にいくつかのスペースまたは属性があることがわかっているためです。 、 そのような:

<input type="password" class="input"></input>

次に、それを除外する必要があります。>記号を除外するということです文字を除外する形式は、角括弧内に ^ を使用することです。つまり、[^] は除外を意味します。

/^<([az]+) ([^>]) /gm

これは、> 記号に加えて、ここで別のグループも設定したことを意味します. () ブラケットがグループ化を示していることをまだ覚えていない場合は、最初に前のケースを確認する必要があります.

4. この書き方では> 記号の後に除外する文字を 1 文字だけ設定するため、ここでこのように書くのは実際には間違っています。このグループの外では、* 記号を使用して 0 から無限大までを表す必要があります。これは、属性文字が多数存在するか存在しない可能性があり、これらのケースを含める必要があるためです。

/^<([az]+) ([^>] + ) * /gm

5. 次は終了タグとして > 記号です. コンテンツ用に別のグループを設定し、(.*)を使用して0 以上の文字を表します

/^<([az]+)([^>]+)* (>(.*)) /gm

6. 次に、 <span> </span>の </ 部分との一致を開始する、タグのペアを持つ別のタグ セットの始まりがあります

/^<([az]+)([^>]+)*(>(.*)) <\/ /gm

7. 次に、ラベルの名前があります. 現時点では、[az]+ のようなコードはもう必要ありません. ローカル マテリアルを使用して、角かっこで最初の式を呼び出すことができ、\1 を使用して表すことができますそれ\Several: 括弧付きのどの正規表現が呼び出されるかを示します。最後に、> 記号を使用してタグを閉じます。

/^<([az]+)([^>]+)*(>(.*))<\/ \1> /gm

8. これで終わりだと思いますか? ダメダメダメ。img タグ <img src = "..."/> など、一部のタグは分離されているため、記号 | を使用して別の状況を考慮する必要があります。通常の状況では、スペースに / 記号を追加し、\s を使用してスペースを表す必要があります。後で終了するには \s\/> を使用してください。

/^<([az]+)([^>]+)* ( >(.*)<\/\1> |\s + \/> ) $ /gm

\s+ は複数のスペースを意味します。


7.IPアドレス

IPアドレスの正規表現も難しく、数字の範囲をどう表現するかが難点。ここでは IPv4 アドレスを処理します。

1. アドレスは、0 から 255 までの 4 つのグループの数字で構成されます。0 から 255 までのグループごとに、数値範囲を分割する必要があります. 結局、正規表現には数値範囲を直接表すコードはありません次に、0-199、200-249、250-255に分割できます最初に 0 ~ 199 の範囲を書きましょう

/^([01]?[0-9][0-9]?)/gm

 上記のように、0 ~ 199 の 1 桁、2 桁、または 3 桁のすべての数字を照合できます。

2. 200 ~ 249、250 ~ 255 の 3 つの数字の間を | または で接続します。

/^([01]?[0-9][0-9]? |2[0-4][0-9]|25[0-5] )/gm

3. IP アドレスはすべて . で接続されているため、\. を追加し、これら 3 つのグループを 1 つのグループとして設定し、{3} を使用して 3 回繰り返します. 4 回ではなく 3 回繰り返す理由は、最後のグループは 0 です。255 の後に英語のピリオドはありません。

/^ ( ([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5]) \. ){3} /gm

4. 最後の 0 ~ 255 を最後に追加すると、OK でスパイシーになります

/^(([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3} ([01] ? [0-9][0-9]?|2[0-4][0-9]|25[0-5])$ /gm


8. 日付

日付の表現にはさまざまな形式があり、ガバナンスでは例として「年月日」の形式のみを使用します

 

1. 年は 0 ~ 9 の数字を 4 回繰り返したもので、月には 0 ~ 9 と 10 ~ 12 の 2 つの状況があります。

0-9 の範囲は 0[1-9] で表され、10-12 の範囲は 1[0-2] で表されます。

/ ^[0-9]{4}-( 0[1-9]|1[0-2] ) /gm

2. 日数も、0 ~ 9、10 ~ 29、30 ~ 31 の 3 つの状況に分割する必要があります。

/^[0-9]{4}-(0[1-9]|1[0-2]) - ( 0[1-9]|[12][0-9]|3[01] ) $ /グラム


9.ナンバープレート番号

 

1.まず、各省、市町村、自治区の略称です。特にキャップはここで覆われていることに注意してください。これは新しい軍のナンバープレートです

/ ^[北京、天津、上海、河北、金、遼、智、黒蘇、浙江、安徽、福建、江西、山東、湖北、湖南、広東、広西、瓊川、貴州、雲南、重慶、チベット、陝西、龍清、寧夏、新福建、広東、金瓊、特使A_Z] {1} / gm

2. 次の数字は、その下の都道府県レベルの行政区域で、大文字で構成されています。最後の5 桁は大文字と数字ですが、警察は公安局の車両であるなどの特別な事情があるため、ここでは 4 回しか繰り返すことができません。

/^[北京、天津、上海、河北、山西、遼済、黒蘇、浙江、安徽、福建、江西、山東、湖北、湖南、広東、貴州、瓊川、貴州、雲南、重慶、チベット、シャノン、清寧、新福建省、広東省、金瓊、使節 A_Z]{1} [A_Z] {1} [A-Z0-9]{4}[A-Z0-9 学校警察香港およびマカオ]{1}$ /gm

なお、ここでのナンバープレート番号はブループレート車を指し、新エネルギー車は考慮していません。


10.身分証明書

フフフフ、いよいよ最後の激辛!これを学んだ後、あなたが疲れているかどうかはわかりませんが、とにかくタイピングにうんざりしています。さあ、一緒に頑張りましょう!

 

ここでは、一般的に使用される 18 ビットをデモンストレーションとして使用します。

1. まず、最初の 6 桁は住所コードですが、最初の桁を 0 にすることはできません

/^[1-9][0-9]{5}/gm

2. 7 桁目から 14 桁目は生年月日です. 頭の良い人は、先に書いた日付を思い出して使うかもしれませんが、ここで年に注意してください. 古代人の生年月日を考慮する必要はありませ。 17年前の検討が必要 17歳以上の方を含みます。

/^[1-9][0-9]{5} (18|19|([23][0-9])) [0-9]{2} /gm

3.次に、上記の日付と同じ月と日があります。それを引き継いでください。

緑色のフォントは月、黄色のフォントは日を表します

/^[1-9][ 0-9]{5}(18|19|([23][0-9])) [0-9]{2}(0[1-9]|1[0 -2]) ( 0[1-9]|[12][0-9]|3[01] ) /gm

4. 次の 15 ~ 17 桁は連続したコードで、3 回繰り返される数字で表すことができます。18桁目がチェックコード

/^[1-9][ 0-9]{5}(18|19|([2 3][0-9]))[0-9]{2}(0[1-9]|1[ 0-2])(0[1-9]|[12][0-9]|3[01]) [0-9]{3} [0-9Xx] $ /gm


ようやく10個のケースが完成しました. 学習できましたか? 正規表現の文法規則をまとめましょう.

ルールが密集しているのを見ると誰もが頭を悩ませますが、私も同じです. 以下のすべてを暗記する必要はありません. これらは前に述べたものですが、もう少し内容を追加しました. 自分で書くだけで十分です. これは、正規表現の波の文法規則を要約するのに役立つだけです. 重要で一般的に使用されるものは上でカバーされます. 通常の状況下では, 正規表現を書くことができます. 次のものは一般的な影響を持っています. 大事なのは過去10件!! !

  • [abc] : 角括弧内の任意の文字を検索します。
  • [^abc] : 角括弧内にない文字を検索します。
  • [0-9] : 0 から 9 までの範囲の数字、つまり数字を検索します。
  • [az] : 小文字の a から小文字の z までの範囲の文字、つまり小文字を検索します。
  • [AZ] : 大文字の A から大文字の Z までの範囲の文字、つまり大文字を検索します。
  • [Az] : 大文字の A から小文字の z までの範囲、つまりすべての大文字と小文字の文字を検索します。
  • .  : 任意の文字を示し、範囲制限なし
  • ? : 前のコンテンツが 0 ~ 1 回出現することを示します
  • + : 前のコンテンツが 1 回以上表示されていることを示します
  • * : 前の内容が何度でも出現することを示します (0-複数回) - 一致する内容は + と一致しますが、1 回だけ書き込むことはできません
  • {n} : 前のコンテンツが n 回出現することを示します
  • {n,m} : 前のコンテンツが少なくとも n 回、最大で m 回出現することを示します
  • {n,} : 前のコンテンツが n 回以上 (n 回を含む) 表示されていることを示します。
  • ()はグループ化に使用され、括弧内の内容は全体として見なされます

メタキャラクター
メタキャラクター 説明
. 改行と行末記号を除く単一の文字を検索します
\w 単語の文字を検索
\W 単語以外の文字を検索
\d 数字を見つける
\D 数字以外の文字を検索
\s 空白文字を見つける
\S 非空白文字を見つける
\b 単語境界に一致
\B 非単語境界に一致
\0 NUL 文字を検索
\n 改行を見つける
\f フォームブレイクを見つける
\r 改行を見つける
\t タブを探す
\v 垂直タブを見つける
\xxx 8 進数 xxxx で指定された文字を検索します
\xdd 16 進数の dd で指定された文字を検索します
\uxxxx 16 進数 xxxx で指定された Unicode 文字を検索します
反復量指定子のリスト
数量詞 説明
n+ 少なくとも 1 つの n を含む任意の文字列に一致します
n* 0 個以上の n を含む任意の文字列に一致します
ん? ゼロまたは 1 つの n を含む任意の文字列に一致します
n{x} x n のシーケンスを含む文字列に一致します
n{x,y} 少なくとも x 個、最大で y 個の n 個のシーケンスを含む文字列に一致します
n{x,} n の x シーケンスを少なくとも含む文字列に一致します
JavaScript 正規表現でサポートされている境界量指定子
数量詞 例証する
^ 先頭に一致、複数行検出​​では、行頭に一致します
$ 末尾に一致、複数行検出​​では、行末に一致します

最後にスパイシーにコーディング!あなたはそれを学びましたか?合言葉は簡単ではありません。みんながたくさんの賞賛とサポートをしてくれます! ! あなたの激励が私が前進する原動力です、今日ここに来ます、さようなら~~~

 

おすすめ

転載: blog.csdn.net/qq_50497708/article/details/128076213