正規表現でのチルダ演算子の意味を知りたい。
私はこの声明を持っています:
if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
$warnings[] = 'ISBN should be 10 digits';
}
チルダの意味を説明したこのドキュメントを見つけました: ~
それは=~
は、この変数をこの正規表現に対して実行することを意味するPerl演算子です。
しかし、なぜ正規表現に2つのチルダ演算子が含まれているのですか?
この場合は、区切り文字として使用されているだけです。
一般に、PHPでは、正規表現の最初と最後の文字は、一致部分の開始位置と終了位置を示す「区切り文字」です(貪欲など、修飾子を最後に追加する場合)。
一般にPHPは、正規表現として意図された文字列の最初の文字からこれを処理し、2番目の出現と2番目の区切り文字として一致させます。これは、テキスト内の通常の区切り文字(たとえば、テキスト内の/
の出現)-これは、厄介なことを行う必要がないことを意味します。
デリミタを「//
」に設定した「/
」のマッチング
/\/\//
「//
」の区切り文字「#
」との一致
#//#
この場合、それは何も意味しません。それは単にパターンの開始と終了を区切ることです。 PHPのpreg_ *で使用しているPCRE(Perl互換の正規表現)では、パターンは、次のように式オプションと一緒に入力されます。
preg_match("/pattern/opt", ...);
ただし、この場合の区切り文字としての「/」の使用は任意です。スラッシュが一般的ですが、何にでも置き換えることができます。あなたの場合、それはチルドです。