Word全体で正規表現に一致させたい。
次の例では、s
またはseason
に一致させようとしていますが、s
、e
、a
、o
およびn
に一致させています。
[s|season]
単語全体に一致するように正規表現を作成する方法
角括弧は文字クラス用であり、実際にはs
、|
、s
、e
、a
、s
(また)、o
およびn
のいずれかに一致させようとしています。
グループ化にはかっこを使用してください。
(s|season)
または非キャプチャグループ:
(?:s|season)
注:非キャプチャーグループはエンジンに一致を保存する必要がないことを伝えますが、他のグループ(キャプチャーグループはそうします)はそれを保存します。小さなものであれ、うまくいくものであれ、「ヘビーデューティ」なものであれば、マッチが必要かどうかを最初に確認したいと思うかもしれません。そうでない場合は、使用する必要のないものを保存するのではなく、非キャプチャグループを使用して計算用のメモリを増やしてください。
このライブ例のスクリーンショットの上: https://regex101.com/r/cU5lC2/1
私は phpshインタラクティブシェル を Ubuntu 12.10 に使用して説明します。 PCRE正規表現エンジン として知られている方法で preg_match
Phpshを起動し、内容を変数に入れてWordで一致させます。
el@apollo:~/foo$ phpsh
php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'
php> echo preg_match('(\w+)', $content1);
1
php> echo preg_match('(\w+)', $content2);
1
php> echo preg_match('(\w+)', $content3);
0
Preg_matchメソッドは、PHP言語内のPCREエンジンを使用して、変数$content1
、$content2
、および$content3
を(\w)+
パターンで分析しました。
$ content1と$ content2には少なくとも1つのWordが含まれていますが、$ content3には含まれていません。
el@apollo:~/foo$ phpsh
php> $gun1 = 'Dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'Unicorn gun';
php> echo preg_match('(Dart|fart)', $gun1);
1
php> echo preg_match('(Dart|fart)', $gun2);
1
php> echo preg_match('(Dart|fart)', $gun3);
1
php> echo preg_match('(Dart|fart)', $gun4);
0
変数gun1
とgun2
には正しいDart
またはfart
という文字列が含まれていますが、gun3にはdarty
が含まれていてまだ一致しているという問題があります。それでは、次の例に進んでください。
正規表現ビジュアルイメージは http://jex.im/regulex および https://github.com/から取得しましたJexCheng/regulex 例:
el@apollo:~/foo$ phpsh
php> $gun1 = 'Dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'Unicorn gun';
php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0
php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0
\b
は、 "Dart"は一致しているが "darty"は一致していないことを確認しながら、Wordの境界があると主張しています。
私はjsで例をテストします。最も簡単な解決策 - 必要なWordを追加してください/ /:
var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
さて、もしあなたが境界を持つこの特定の単語を必要としているならば、他のどんなサイン文字の中にもない。 bマーカーを使います。
var reg = /\bcat\b/
reg.test('acatb');//1 test
false // result
reg.test('have cat here');//2 test
true // result
Jsにexec()メソッドもあります。これはobject-resultを返します。それはf.g.を助けます私たちの言葉の場所/インデックスについての情報を得るために。
var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
すべてのマッチした単語を文字列/文/テキストで取得する必要がある場合は、g修飾子(グローバルマッチ)を使用できます。
"cat good cat good cat".match(/\bcat\b/g).length
// 3
今最後のもの - 私は1特定のWordを必要としないが、それらのいくつか。使う記号、それは選択を意味します/または。
"bad dog bad".match(/\bcat|dog\b/g).length
// 1
[ ]
は文字クラスを定義します。つまり、そこに設定したすべての文字は一致します。 [012]
は0
、1
、または2
と一致し、[0-2]
は同じように動作します。
あなたが欲しいのは、ORステートメントを定義するためのグルーピングです。あなたの問題には(s|season)
を使ってください。
ところで。あなたは気を付けなければならない。通常の正規表現内(またはグループ化内)のメタ文字は、文字クラスとは異なります。文字クラスはサブ言語のようなものです。 [$A]
は、$
またはA
のみに一致し、それ以外は一致しません。ここでドルのために逃げることはありません。