web-dev-qa-db-ja.com

正規表現のチルダ演算子

正規表現でのチルダ演算子の意味を知りたい。

私はこの声明を持っています:

if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
    $warnings[] = 'ISBN should be 10 digits';
}

チルダの意味を説明したこのドキュメントを見つけました: ~

それは=~は、この変数をこの正規表現に対して実行することを意味するPerl演算子です。

しかし、なぜ正規表現に2つのチルダ演算子が含まれているのですか?

49
Keira Nighly

この場合は、区切り文字として使用されているだけです。

一般に、PHPでは、正規表現の最初と最後の文字は、一致部分の開始位置と終了位置を示す「区切り文字」です(貪欲など、修飾子を最後に追加する場合)。

一般にPHPは、正規表現として意図された文字列の最初の文字からこれを処理し、2番目の出現と2番目の区切り文字として一致させます。これは、テキスト内の通常の区切り文字(たとえば、テキスト内の/の出現)-これは、厄介なことを行う必要がないことを意味します。

デリミタを「//」に設定した「/」のマッチング

/\/\//

//」の区切り文字「#」との一致

#//#

57
Mez

この場合、それは何も意味しません。それは単にパターンの開始と終了を区切ることです。 PHPのpreg_ *で使用しているPCRE(Perl互換の正規表現)では、パターンは、次のように式オプションと一緒に入力されます。

preg_match("/pattern/opt", ...);

ただし、この場合の区切り文字としての「/」の使用は任意です。スラッシュが一般的ですが、何にでも置き換えることができます。あなたの場合、それはチルドです。

7
Nick