1

次のコードでは、「preg_replace() [function.preg-replace]: Unknown modifier '?'」というエラーが表示されます。

$str = 'background: url("../../dsdgsd/contain.jpg");';

echo preg_replace('/url\s?\(\s?(\"|\')([../?]*[a-z/]*?[/?]?)([a-z0-9_-]*[.][jpg|jpeg|png|jpeg]*)([\'|\"]\))/gi','url("../images/$3")',$str);
4

3 に答える 3

2

この正規表現が何をしているのかわかりませんが/、パターンに文字が含まれているため、エラーが発生します。パーサーは、パターンが完了したと?判断し、それ以降のすべて (この場合) を修飾子として受け取ります。したがって、エラー。

別のセパレーターを使用して修正します: (ほとんどの人は#、多くの を扱うときに使用します/)

echo preg_replace('#url\s?\(\s?(\"|\')([../?]*[a-z/]*?[/?]?)([a-z0-9_-]*[.][jpg|jpeg|png|jpeg]*)([\'|\"]\))#i','url("../images/$3")',$str);

(これとは別に、前述のように、g修飾子は必要ありません)

于 2012-09-19T09:27:53.410 に答える
1

の場合、修飾子preg_replaceを使用する必要はありません (使用しないでください)。既にグローバルに置き換えられています。globalg

PHP には g 修飾子はありません。

于 2012-09-19T09:25:12.533 に答える
1

文字で正規表現を開始するため/、これは区切り文字であり、正規表現内のすべての出現をエスケープする必要があります/。2 番目の後の最初の文字/?であるため、修飾子として解釈されます。

于 2012-09-19T09:28:23.177 に答える