データベースに保存されている用語集に含まれている、大文字と小文字を区別しない特定のコンテンツブロック内のすべての単語を検索するために使用している正規表現があります。これが私のパターンです:
/($word)/i
問題は、私が使用する場合、 get/(Foo)/i
のような単語Food
が一致することです。単語の両側に空白または単語の境界が必要です。
Foo
文の最初、途中、または最後の単語である場合に、その単語のみに一致するように式を変更するにはどうすればよいですか?
データベースに保存されている用語集に含まれている、大文字と小文字を区別しない特定のコンテンツブロック内のすべての単語を検索するために使用している正規表現があります。これが私のパターンです:
/($word)/i
問題は、私が使用する場合、 get/(Foo)/i
のような単語Food
が一致することです。単語の両側に空白または単語の境界が必要です。
Foo
文の最初、途中、または最後の単語である場合に、その単語のみに一致するように式を変更するにはどうすればよいですか?
単語の境界を使用する:
/\b($word)\b/i
または、SinanÜnürの例のように「SPECTRE」を検索している場合:
/(?:\W|^)(\Q$word\E)(?:\W|$)/i
(\w+)
PCREまたは同様のものを使用していると仮定します。
このライブの例から取られた上のスクリーンショット:http://regex101.com/r/cU5lC2
(\w+)
Ubuntu 12.10でphpshインタラクティブシェルを使用して、 preg_matchと呼ばれる方法でPCRE正規表現エンジンをデモンストレーションします。
phpshを起動し、コンテンツを変数に入れて、単語に一致させます。
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つの単語が含まれていますが、$content3には含まれていません。
(dart|fart)
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty 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が含まれています。gun4はしません。ただし、単語の検索がfart
一致する場合は問題になる可能性がありますfarty
。これを修正するには、正規表現で単語の境界を適用します。
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty 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
fart
したがって、単語の境界を持つ\b
単語がコンテンツに存在しないことを除いて、前の例と同じですfarty
。
使用すると\b
、驚くべき結果が得られます。単語をその定義から分離するものを理解し、その情報をパターンに組み込む方がよいでしょう。
#!/usr/bin/perl
use strict; use warnings;
use re 'debug';
my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence,
Terrorism, Revenge and Extortion) is a fictional global terrorist
organisation';
my $word = 'S.P.E.C.T.R.E.';
if ( $str =~ /\b(\Q$word\E)\b/ ) {
print $1, "\n";
}
出力:
RExのコンパイル"\b(S \ .P \ .E \ .C \ .T \ .R \ .E \。)\ b" 最終プログラム: 1:バウンド(2) 2:OPEN1(4) 4:正確(9) 9:閉じる1(11) 11:バウンド(12) 12:終了(0) 0に固定された「SPECTRE」(固定されていることを確認)stclass BOUND minlen 14 REx "\ b(S \ .P \ .E \ .C \ .T \ .R \ .E \。)\b"のsvでの"SPに対する一致の開始を推測します .ECTRE(防諜のための特別幹部」.. オフセット0でアンカーされたsubstr"SPECTRE"が見つかりました。 start_shift:0 check_at:0 s:0 endpos:1 STCLASSと矛盾しません... 推測:オフセット0で一致 REx "\ b(S \ .P \ .E \ .C \ .T \ .R \ .E \。)\b"を"SPECTRE(Special Exec 防諜に役立つ」... 0 | 1:BOUND(2) 0 | 2:OPEN1(4) 0 | 4:正確(9) 14 | 9:CLOSE1(11) 14 | 11:BOUND(12) 失敗した... 一致しませんでした RExを解放する: "\ b(S \ .P \ .E \ .C \ .T \ .R \ .E \。)\ b"
Notepad++で実行している場合
[\w]+
単語全体が表示され、括弧を追加してグループとして取得できます。例:conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
。LeakyReLU
コメントとして独自の行に移動し、現在のアクティベーションを置き換えたいと思います。notepad ++では、これは次の検索コマンドを使用して実行できます。
([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
そして、replaceコマンドは次のようになります。
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
スペースは、コード内で正しいフォーマットを維持するためのものです。:)
コード内の列挙型を検証したい場合は、ガイドに従うことができます
^
Regex Worldでは、文字列の開始と終了に使用できます$
。それらを組み合わせて使用する|
ことはあなたが望むものかもしれません:
^(Male)$|^(Female)$
Male
またはの場合にのみtrueを返しますFemale
。
単語の境界を使用\b、
次の(4つのエスケープを使用)は私の環境で機能します:Mac、safariバージョン10.0.3(12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
文字列内のすべての「単語」を取得します
/([^\s]+)/g
基本的
^/s
にはスペースを壊すことを意味します(または非スペースのグループに一致します)貪欲
のために忘れないでくださいg