一致する文字の数がわからない場合があります。この不確実性に適応できるように、定期的な表現は予選の概念をサポートしています。これらの予選は、試合を満たす前に、正規表現の特定のコンポーネントが表示されなければならない回数を指定できます。
次の表は、さまざまな予選とその意味の説明を示しています。
キャラクター | 説明する |
---|---|
* | 以前のサブエクスペッションゼロまたは複数回一致します。たとえば、Zo*はZと動物園に一致させることができます。 * {0、}に相当します。 |
+ | 以前のサブエクスペッションを1回以上一致させます。たとえば、「Zo+」はZoとZooと一致しますが、Zではありません。 +は{1、}に相当します。 |
? | 以前のサブエクスペッションゼロまたは1回と一致します。たとえば、do(es)はdoまたはdoを行うことができます。 {0,1}に相当します。 |
{ n } | nは非陰性整数です。決定されたn時間を一致させます。たとえば、 'o {2}'はボブの「O」と一致することはできませんが、2つのOSを食品に一致させることができます。 |
{ n 、} | nは非陰性整数です。少なくともn回一致します。たとえば、 'o {2、}'はボブの「O」と一致することはできませんが、foooooodのすべてのOSと一致させることができます。 'o {1、}'は 'o+'に相当します。 'o {0、}'は 'o*'に相当します。 |
{ n 、 m } | mとnの両方が非陰性整数であり、 n <= m 。少なくともn回一致し、 m回まで一致させます。 liu、o {1,3}は、foooooodの最初の3つのOSと一致します。 'o {0,1}'は「o?」に相当します。コンマと2つの数字の間にスペースがないことに注意してください。 |
大規模な入力ドキュメントの場合、章の数は9つの章を簡単に超えることができるため、2桁または3桁の章番号を扱う方法があります。予選はこの関数を提供します。次のJScriptの正規表現は、章のタイトルを任意の数のビットと一致させることができます。
/Chapter [1-9][0-9]*/
次のVBScript正規表現は同じ一致を実行します。
Chapter [1-9][0-9]*
予選は範囲式の後に表示されることに注意してください。したがって、含まれる範囲式全体に適用されます。この場合、0〜9の数値のみが指定されます。
「+」予選は、2番目または後続の位置で必ずしも数字が必要ではないため、ここでは使用されません。また、「?」は、章の数を2桁に制限するため、使用されません。 「章」とスペース文字の後に、少なくとも1つの数値を一致させる必要があります。
章の制限が99の章であることが知られている場合、次のJScript式を使用して、少なくとも1つの数値を指定しますが、2つ以下の数字を指定できます。
/Chapter [0-9]{1,2}/
VBScriptの場合、次の正規表現を使用できます。
Chapter [0-9]{1,2}
上記の式の欠点は、99を超える章番号がある場合、最初の2桁のみと一致することです。もう1つの欠点は、一部の人々が第0章を作成しても一致させることができることです。 2桁の数字に一致するより良いJScript式は次のとおりです。
/Chapter [1-9][0-9]?/
または
/Chapter [1-9][0-9]{0,1}/
VBScriptの場合、次の式は上記に相当します。
Chapter [1-9][0-9]?
または
Chapter [1-9][0-9]{0,1}
「 *
」、「 +'
、「 ?'
はすべて貪欲です。つまり、できるだけ多くの単語を一致させます。時々、これはあなたが起こりたいことではありません。時々それはたまたま最小の試合になります。
たとえば、HTMLドキュメントを検索して、H1タグに含まれる章のタイトルを見つけたい場合があります。ドキュメントでは、テキストには次の形式がある場合があります。
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
次の式は、最初からサイン(<)より少ないもの(<)からH1マーカーの終わりまですべてを一致させます。
/<.*>/
VBScriptの正規表現は次のとおりです。
<.*>
一致するものが開始H1タグである場合、次の非グリーディ式は<H1>のみに一致します。
/<.*?>/
または
<.*?>
「*」、 '、または「?」の後に「?」
これまで、見られる例は、どこにでも表示される章のタイトルを見つけることを検討するだけです。スペースと番号が表示される文字列「章」は、実際の章のタイトルまたは他の章への相互参照である場合があります。実際の章のタイトルは常に行の先頭に表示されるため、クロス参照ではなくタイトルのみを探す方法を設計する必要があります。
ロケーターはこの機能を提供します。ロケーターは、行の最初または終了時に正規表現を修正できます。また、単語内または単語の開始または終了時にのみ表示される正規表現を作成することもできます。次の表には、正規表現とその意味のリストが含まれています。
キャラクター | 説明する |
---|---|
^ | 入力文字列の開始位置に一致します。 regexpオブジェクトのマルチラインプロパティが設定されている場合、 ^は '/n'または '/r'後の位置も一致します。 |
$ | 入力文字列の終了位置に一致します。 regexpオブジェクトのマルチラインプロパティが設定されている場合、$は「/n」または「/r」の前の位置と一致します。 |
/b | 単語の境界を一致させます。つまり、単語と空間の間の位置を意味します。 |
/b | 単語以外の境界に一致します。 |
修飾子はロケーターには使用できません。新しいラインまたは単語の境界の前後に連続した位置がないため、「^*」などの式は許可されていません。
テキストの行の先頭にあるテキストに一致するには、正規表現の先頭に「^」文字を使用します。この「^」の構文を括弧表現の構文と混同しないでください。それらの構文は根本的に異なります。
テキストの行の最後にあるテキストに一致するには、正規表現の最後に「$」文字を使用します。
章のタイトルを探すときにロケーターを使用するには、次のJScriptの正規表現は、行の先頭に最大2つの数字を持つ章のタイトルと一致します。
/^Chapter [1-9][0-9]{0,1}/
VBScriptの同じ関数の正規表現は次のとおりです。
^Chapter [1-9][0-9]{0,1}
実際の章のタイトルは、行の先頭に登場するだけでなく、この行にこのコンテンツのみを持っているため、行の終わりにもある必要があります。次の式は、指定された一致が章とのみ一致し、相互参照と一致しないことを保証します。これは、文字通りのラインの開始位置と終了位置のみに一致する正規表現を作成することによって達成されます。
/^Chapter [1-9][0-9]{0,1}$/
vbscriptの場合、使用してください。
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
一致する単語の境界はわずかに異なりますが、正規表現に非常に重要な機能を追加します。単語の境界は、単語と空間の間の位置です。非単語の境界は他のどこにでもあります。次のJScript式は、「章」という単語の最初の3文字と一致します。
//bCha/
vbscriptの場合:
/bCha
ここでは、「/b」演算子の位置が重要です。一致する文字列の先頭にある場合、単語の先頭にある一致が文字列の終わりにある場合、単語の最後の一致が探しられます。たとえば、次の式は、単語の境界の前に表示される「章」という単語の「ter」と一致します。
/ter/b/
同様に
ter/b
次の式は「apt」と一致します。なぜなら、「apt」の途中にあるが、「適性」で「apt」と一致しないからです。
//Bapt/
同様に
/Bapt
これは、「apt」が「章」という単語と「適性」という単語の単語境界位置に表示されるためです。単語以外の境界演算子の位置は重要ではありません。なぜなら、試合は単語の開始または終了とは関係ないからです。