2011-10-29 10 views
1

正しく動作するこの正規表現が見つかりましたが、私は#(開始時)と式の終わりを理解できませんでした。 ^$は開始/終了文字ではありませんか?正規表現に含まれる文字は何ですか?

preg_match_all('#^/([^/]+)/([^/]+)/$#', $s, $matches); 

おかげ

+0

正規表現の紹介:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php –

+0

http://www.regular-expressions.info/ ://www.php.net/manual/en/regexp.reference.delimiters.phpとhttp://www.regular-expressions.info/php.html – mario

答えて

3

一致したパターンは、このよう#正規表現区切り文字として使用され、多くの/含ま。これらはあなたがあなたのパターンで複数の/をお持ちの場合は第二の例では、\/で醜いマスキングを避けるために適してい

/^something$/ 

#^something$# 

同じです。これは、REは、標準//構文を使用してと同じように希望する方法である:

/^\/([^\/]+)\/([^\/]+)\/$/ 
+3

これらは*デリミタ*と呼ばれます:http:// php。 net/manual/ja/regexp.reference.delimiters.php –

1

について#正規表現自体のdelimiter

。表現のためにどの区切り文字が使われているかを知ることだけが意味です。通常は/が使用されますが、他のものも可能です。 PCRE式には、デリミタがpreg_matchまたはpreg_match_allである必要があります。

について^character classesインサイド

[...])、それは最初の文字だ場合、^ないの意味を持ちます。

[abc] : matching a, b or c 
[^abc] : NOT matching a, b or c, match every other character instead 
0

はまた、ここで開始と終了時#は、カスタムの正規表現の区切り記号です。通常の/.../の代わりに#...#があります。ちょうどperlのように。

0

これらは区切り文字です。任意の区切り文字を使用できますが、正規表現の先頭と末尾に指定する必要があります。

正規表現の中に詳細な洞察力のために、このドキュメントを参照してください。 http://www.php.net/manual/en/pcre.pattern.php

0

あなたは区切り文字としてほとんど何でも使用することができます。最も一般的なものは/.../ですが、パターン自体に/が含まれていて、すべてのエスケープをエスケープしたくない場合は、別の区切り文字を使用できます。私の個人的な好みは(...)です。なぜなら、結果の$0が完全なパターンであることを思い出させるからです。しかし、あなたは何でもできる、<...>#...#%...%{...} ...よく、ほとんど何でも。私は要件が何であるか正確には分かりませんが、 "英数字以外の文字ではない"と思います。

0

は私がそれを打破してみましょう:

#は、最初の文字であるので、これは正規表現の区切り文字として使用される文字である - 我々は次の(エスケープに到達したとき、我々は最後まで持って知っています)文字クラスのこれらの

^外の一つは、これは

/は普通の「スラッシュ」文字である文字列の先頭を意味

([^/]+)これは、ではない文字のインスタンスを少なくとも1つ(+)含む括弧付きの式です。 a /(^)は、文字クラスの先頭で文字クラスを反転します。つまり、これに含まれていない文字リスト)再び再び再び

/

([^/]+)

/

$これは文字列の最後に一致します

#これは最終的な区切り文字ですので、正規表現が終了したことがわかります。

関連する問題