2012-09-25 7 views
10

PHP preg_matchの中に正規表現'!\d!'があります。一体何ですか? PHP PCRE docsから両脇に感嘆符が付いた正規表現

+7

downvotesとは何ですか?それは良い言葉かもしれませんが、これは合理的な質問だと思います。句読点の検索は基本的に不可能で、 'preg_match'のdocページからPCRE regex delimitersのdocページまでの3回のクリックです。そして、あなたは "正規表現区切り文字"を探していることを知っていなければなりませんが、あなたはすでに答えを知っています... – verdesmarald

+0

私は何年もPHPをコーディングしていました。区切り文字として使用!私はグーグルで、この非常に役に立つ質問を見つけました。 P.S.私はそれがデリミタとして使われていないと思う。一見すると、私は叫び声のマークを "Not"または "Negative match"と解釈しました。他の多くの人間もそうすると思います。 –

答えて

12

は:

PCRE関数を使用して、パターンはデリミタによって囲まれていることが必要です。区切り文字には、英数字以外の非バックスラッシュ、空白以外の文字を使用できます。

この場合、単に区切り文字として!を使用しています。正規表現の区切り文字をエスケープすることなく正規表現を使用したい場合に使用されることがよくあります。正規表現の残りの部分は単純に\dなので、この場合は本当に必要ありませんが、パスに3つ以上のディレクトリレベルが含まれているかどうかを確認するのに便利です。

/\/.*\/.*\/.*\/ blah blah blah/

か::

!/.*/.*/.*/ blah blah blah ! 

今、彼らは徹底的にテストされていない、と宣伝として完全に機能しないかもしれないが、あなたは最小限のエスケープ再一般的なアイデアを取得する必要がありますあなたは、のいずれかを使用することができます必須。

もう1つの例は、文字列がhttp://というマーカーで始まっているかどうかを確認することです。これらの2つのいずれか:

/^http:\/\// 
!^http://! 

でも十分ですが、2番目はわかりやすいです。

+0

「\ d」と書いてみませんか? – Graduate

+0

さて、それは動作しません、私はチェックした... – Graduate

+0

@大学院、あなたは正規表現の意味を知りたがっていました。代替区切り文字を使用すると便利であり、修正が必要な可能性があることを完全に開示する理由も提供しました。その意図は単に、別のデリミタを使用して正規表現がどれほどできるか​​を示すことでした。私はそれらのサンプルを使うべきではありませんでした(少なくとも、デバッグせずに、ちょっとしたことを修正する必要はありません)。 – paxdiablo

5

!が区切り文字として使用され、\dが1桁に一致します。

/[0-9]/

+1

ありがとう、私はあなたが常に文字 "/"を使用する必要があると思った。私はそれを私が代用できるとは知らなかった。 – Graduate

関連する問題