Latest web development tutorials

正規表現 - 構文

正規表現(正規表現)は、文字列が交換または条件を削除するには、サブストリングに一致する特定の部分が含まれているかどうかを確認するために使用することができます文字列のセットを説明する文字列から部分と一致しますように。

  • カラムカタログ、DIR * .TXTのLS * .txtファイルまたは* .txtのではなく、正規表現で、正規表現の意味が異なっていると* *があるためです。
  • 正規表現の作成方法と数式を同じ方法で作成します。 それは大きな式を作成するために一緒に小さな式を組み合わせることができますメタ文字と演算子のさまざまな方法を使って、あります。 コンポーネントの正規表現は、単一の文字、文字セット、文字の範囲を選択し、文字の間、またはこれらの構成要素の全てを任意に組み合わせることができます。

正規表現は、テキストモードは、その(「メタ文字」と呼ばれる)と特殊文字(例えばAからZまでの文字など)の一般的な文字で構成されています。 モードの説明テキストを検索するときには、1つ以上の文字列にマッチします。 テンプレート、文字モードと一致するように、検索文字列として正規表現。

通常の文字

通常の文字は、明示的にメタ文字印刷可能なすべての非印刷可能文字として指定されていません。 これは、すべて大文字と小文字、すべての数字、すべての句読点およびその他の記号が含まれています。

非印字文字

非印刷文字も、正規表現の一部とすることができます。 次の表は、非印刷文字を表すエスケープシーケンスを示しています。

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

特殊文字

いわゆる特殊文字、それは*で "* .txtの"言うように、いくつかの文字は、特別な意味を持っているということです、単に何の意味の文字列表現することを意味します。 あなたは*ファイルを使用してファイル名を検索したい場合は、それがフロント\にプラスで、*をエスケープする必要があります。 lsコマンド\ *。txtの。

それらを一致させるには、多くのメタ文字は、特別な処理を必要とします。 これらの特殊文字を一致させるには、あなたが最初の文字 "エスケープ"を行う必要があり、それは、彼らの前にバックスラッシュ文字(\)です。 次の表は、正規表現の特殊文字を示しています。

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

予選

修飾子はマッチを満たすために何度も表示される必要があり、特定のコンポーネントの正規表現を指定するために使用されます。 6の合計があります*または+または?それとも{N}または{nは、}または{N、M}。

正規表現の修飾子は、次のとおりです。

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

大きな入力文書内の章番号以来、おそらく9つ以上の意志あなたは、2つまたは3つの章番号に対処する方法が必要ですので。 修飾子はあなたにこの機能を提供します。 次の正規表現は、章のタイトルに番号が付け任意のビット数に一致します。

/Chapter [1-9][0-9]*/

修飾子は範囲式の後に表示されますのでご注意ください。 したがって、それは、この場合には、発現の全範囲に0-9から(0および9も含む)のみ指定された数を適用します。

第二の位置または後方位置に必ずしも番号を持っている必要はありませんように+修飾子は、ここで使用されていません。 NORでしょうか? 文字、それだけで2桁に章番号を制限するので。 あなたは戻って、少なくとも1の数章とスペース文字を一致させる必要があります。

あなたは章番号が唯一の99章に制限されている知っていれば、少なくとも一つが、少なくとも2桁を指定するには、次の式を使用することができます。

/Chapter [0-9]{1,2}/

上記の式の欠点は、99章はまだ2桁のみの先頭にマッチする数を超えています。 もう一つの欠点は、第0章も一致することです。 次のように式の2桁のみのより良いマッチングは次のとおりです。

/Chapter [1-9][0-9]?/

または

/Chapter [1-9][0-9]{0,1}/

*、+、そして、彼らが唯一の彼らの背後に、できるだけ多くのテキストと一致したため、?修飾子は貪欲であり、プラス?非欲張りまたは最小の一致を達成することができます。

たとえば、H1タグのセクションの見出しで囲まれた見つけるためにHTMLドキュメントを検索することがあります。 文書内のテキストは、次のように:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

すべての内容は次の式は記号未満から始まる一致(<)()の間のH1タグがシンボルより大きい閉じます>。

/<.*>/

あなたが唯一のH1タグの始まりと一致する必要がある場合は、以下の「非貪欲」という表現は、<H1>を一致します。

/<.*?>/

することにより*、+、または?修飾子場所後?式は「非欲張り」または最小限の表現のマッチングに「貪欲」から切り替えることができます。

ロケータ

ロケータは、行の先頭や末尾に固定された正規表現にできます。 彼らはまた、あなたがそのような正規表現を作成することができ、これらの正規表現は、単語で単語の先頭や末尾に単語を表示されます。

ロケータは、\ Bは非ワード境界を表し、単語の前または後に、文字列や単語の境界を記述するために使用される^と$文字列の先頭と末尾を参照してください、\ bの境界の説明。

正規表現の修飾子は、次のとおりです。

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

注:修飾子とアンカーポイントを使用することはできません。 直前またはラッピングまたはワード境界の後は、複数の場所を持つことはできませんので、^ *のように、このような表現を許可していませんので。

テキストの先頭にテキストの行を一致させるために、表現のn ^文字を使用して起動してください。 ^これは混乱の中括弧の中で式を使用する使用しないでください。

テキストの行の末尾にテキストを一致させるには、ポジティブに$文字を使用して、式の最後を参照してください。

アンカーポイントは、次の正規表現は、章のタイトルに一致した場合、検索でのセクションの見出しを使用するには、タイトルは2つだけ番号が続き、行の先頭含まれています。

/^Chapter [1-9][0-9]{0,1}/

真の章見出しは、行の先頭にのみ表示されますが、それは行のテキストだけです。 行が最初に同じ行の最後に現れた表示されます。 次の式は、指定された試合は、唯一のクロスリファレンスセクションに一致せずに一致することを確認することができます。 唯一の正規表現のテキストの行の先頭と末尾にマッチ作成することにより、あなたはそれを行うことができます。

/^Chapter [1-9][0-9]{0,1}$/

マッチワード境界はわずかに異なりますが、正規表現は非常に重要な機能。 ワード境界は、場所と単語間のスペースです。 非ワード境界は、他の場所です。 これらの3文字がワード境界の後に表示されるので、次の式は、単語章3文字の先頭に一致します。

/\bCha/

\ Bの文字の位置は非常に重要です。 それが一致する文字列の先頭に配置されている場合、それは単語の先頭に一致するものを探します。 それは、文字列の最後にある場合、それは言葉の終わりに一致するものを探します。 それはワード境界の前面に表示されるたとえば、次の式は、言葉の章文字列ターに一致します:

/ter\b/

次の式は、文字列章がち一致しますが、aptの文字列の適性と一致していません。

/\Bapt/

アプト単語列章非ワード境界に表示されますが、単語は単語境界の適性に表示されます。 試合はそれが単語の先頭や末尾にあるかどうかを気にしないので、\ B非単語境界演算子の場合、位置は、重要ではありません。

選択します

|で区切られた隣接間のオプションを使用して、選択項目のすべてを囲む括弧を使用します。 しかし、括弧を使用しての副作用があり、該当する試合はこの副作用を排除するための最初のオプションでは:?、この時点で利用可能なキャッシュされますされています。

前記:?非キャプチャつの要素、2を非捕捉がある要素がある=と2は、括弧を、より多くの意味を、旧正事前調査を持っている任意の開始で一致している式です??!事前調査は、任意の開始位置に検索文字列にマッチする正規表現パターンに一致しない負で検索文字列に一致する位置のパターン。

後方参照

両側のパターンの正規表現パターンまたは一部が一時記憶バッファに追加括弧関連試合になりますについては、各サブ捕獲さは左から右にマッチするために保存されている正規表現パターンで表示されます。 最初からバッファ1号は、99キャプチャさ部分式を保存することができます。 各バッファは、nが1であるか、または2桁の10進数は、特定のバッファを識別 '\ n'の訪問を、使用することができます。

あなたは非キャプチャメタキャラクタ ':?'を使用することができ、または、キャプチャを書き換える '=?'関連試合を無視するように保存するには?!」。

最も簡単な後方参照、最も有用なのは、2つの同一の隣接するワード一致を検索するテキストを提供する能力です。 次の文の例:

Is is the cost of of gasoline going up up?

上記の文章は、明らかに多くの繰り返しの単語を持っています。 我々は、文を見つけるのではなく、重複する各単語の出現、より良いことを見つけるための方法を考案することができます。 次の正規表現は、これを達成するために、単一の部分式を使用しています。

/\b([a-z]+) \1\b/gi

[AZ] + 1文字以上を含む、指定されているように、表現をキャプチャします。 正規表現の2番目の部分は、それは、ちょうど括弧内の式で一致した単語の2回目の出現で、子以前にキャプチャの基準を一致させることです。 \ 1は最初の部分マッチを指定します。 単語境界メタ文字は単語全体を検出していることを確認します。 それ以外の場合、このような「発行された」または「これは」などのフレーズが正しく、この発現を同定されていません。

グローバルタグの後に正規表現(g)を示し、この式は、入力文字列に適用されるなど、多くのマッチを見つけることができます。 (ⅰ)タグの終わりに鈍感式の場合は、大文字と小文字を区別しない指定します。 潜在的なマッチマルチラインタグは改行が両側に発生する可能性があります指定します。

後方参照は、そのコンポーネントにユニバーサル・リソース・インジケータ(URI)であることができます。 あなたはに分けることがしたいとしたURIのプロトコル(FTP、HTTP、など)、ドメインアドレスとページ/パス以下:

http://www.w3cschool.cc:80/html/html-tutorial.html

次の正規表現は、この機能を提供します。

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

最初の括弧内の部分式は、Webアドレスのプロトコル部分をキャプチャします。 部分式は、コロンと2前方の前にスラッシュ任意の単語に一致します。 第二の括弧内の部分式は、アドレスのドメインアドレスの一部をキャプチャします。 以外の1つ以上の文字:部分式マッチ/と。 第三の括弧内の部分式は、ポート番号(1が指定されている場合)を取得します。 サブ式はコロンの後にゼロ個以上の数字と一致します。 それは、部分式回繰り返すことができます。 最後に、第4括弧内の部分式は、Webアドレスおよび/またはページ指定されたパスをキャプチャします。 これは、部分式は任意の文字列#またはスペース文字に一致します含まれていません。

URIの上に適用される正規表現は、サブ一致するエントリは、次の要素が含まれます。

  • 最初の括弧内の部分式は、 "HTTP"が含まれています
  • 第二の括弧内の部分式は「www.w3cschool.cc "が含まれています
  • 第3括弧内の部分式 ":80"
  • 第四の括弧内の部分式が含まれています "/html/html-tutorial.html」