2009-06-02 27 views
44

正規表現でティルド演算子の意味を知りたいと思います。正規表現のチルダ演算子

私はこの文を持っている:

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

私はチルダが何を意味するのか、この文書は説明した:~

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

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

答えて

52

この場合、デリミタとしてのみ使用されています。

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

一般的に、PHPは文字列中の最初の文字を正規表現として解釈し、2番目の区切り文字を2番目の区切り文字と一致させます。これは、テキスト内に通常のデリミタが現れる場合に便利です(たとえば、テキスト内には、/の出現があります)。これは、扱いにくいことを意味します。

"#"

#//#

のデリミタと " //" の " /"

/\/\//

が一致するように設定デリミタと "//" のマッチング

+1

ic、私は/区切り記号に慣れていますので、区切り記号と少し混同していました。明確化のためにありがとう。 –

+0

これは、PCRE http://docs.php.net/manual/en/book.pcre.phpにのみ適用され、POSIX EREには適用されません。http://docs.php.net/manual/en/book.regex.php – Gumbo

6

この場合、何も意味しません。パターンの開始と終了を区切ります。しかし

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

、「/」を使用する:PHPに*あなたはpreg_で使用しているものであるPCRE(Perl互換正規表現)では、パターンは、側面に沿っ入力はそうのように、表現の選択肢でありますこの場合のデリミタは任意です。フォワードスラッシュは一般的ですが、何にでも置き換えることができます。あなたの場合、それはチルダです。

+0

オハイオ州オハイオ州。私は本から正規表現を得た。彼らはそれが意味するものを説明しなかった。だから少し混乱していた。私は混乱しているので、物事を明確にしようとしていました。ありがとう! –

+0

'/'はperlの正規表現の標準的な区切り文字であり、これはpregの略です。 –

関連する問題