2012-03-15 11 views
1

この2つのdiffステートメントの違いは何ですか?参考資料はありますか?PHPのpreg_関数の引用符として '{' ... '}'と '%' ... '%'を使用することの違いは何ですか?

'{<table width="100%" border="0" cellspacing="0" cellpadding="0">.*?</table>}si' -> Success 
'%<table width="100%" border="0" cellspacing="0" cellpadding="0">.*?</table>%si' -> Fail 
+0

"参考資料"とはどういう意味ですか? PCREの紹介(http://es.php.net/manual/en/intro.pcre.php)のようなもの? –

答えて

5

あなたは区切り文字として%を使用することを決定した場合さて、あなたは(100%)、あなたの文字列の内部で使われている区切り文字を使用している、あなたはバックスラッシュで文字列内の%の任意のインスタンスをエスケープする必要があります。以下は動作します:

'%<table width="100\%" border="0" cellspacing="0" cellpadding="0">.*?</table>%si' 
+0

ああ、私はそれを見落とした。混乱がどこから生じるのか誤解されました。 – Joey

1

documentationを参照してください:

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

よく使用される区切り文字は、スラッシュ(/)、ハッシュ記号(#)、ティルダ(〜)です。有効な区切りパターンの例を以下に示します。前述の区切り文字に加え

/foo bar/ 
#^[^0-9]$# 
+php+ 
%[a-zA-Z0-9_-]% 

、開閉ブラケットは、それぞれ、開始および終了区切り文字されるブラケットスタイルの区切り文字を使用することも可能です。

{this is a pattern} 

だから、彼らは両方とも同等だ、それはちょうど1つは、最初のスタイルの区切り文字を使用していますし、その他には中括弧を使用しています。しかし、両方とも正規表現を区切っています。正規表現のオプションは、どちらの場合も閉じ区切り文字の後に来ます。

関連する問題