ホームページ  >  記事  >  バックエンド開発  >  preg_replace について非常に混乱していますか?

preg_replace について非常に混乱していますか?

WBOY
WBOYオリジナル
2016-06-23 14:01:14810ブラウズ

$thumbMark = '200x200';$thumb =$r['thumb'];echo $r['thumb'].'<br />'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg                //$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';$r['thumb'] = preg_replace('/_\d+x\d+/', '_' . $thumbMark,$thumb);echo $r['thumb'].'<br />'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg


上記の置換関数は無効ですが、以下のように「$thumb」に直接値を代入すると正常に置換できるのはなぜでしょうか?

$thumbMark = '200x200';$thumb =$r['thumb'];echo $r['thumb'].'<br />'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';$r['thumb'] = preg_replace('/_\d+x\d+/', '_' . $thumbMark,$thumb);echo $r['thumb'].'<br />'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_200x200.jpg




ディスカッションに返信 (解決策)

var_dump($r['thumb'])
結果を投稿

var_dump($r['thumb']);
結果を投稿する


string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"

次のようなコードをブロックします:

($r = while $ db-> fetch_array ($ result){heer $ == 1){200x200 '; http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg 1405800222483 0.9000001763_100x100.jpg';
//echo $r['thumb'].'< ;br />' ;
$list の値を確認する

$list の値を確認する
if ($list == 1) {
$thumbMark = '200x200 ';
echo 'list:'.$list; // リスト:1
}

普通

初めて PHP に触れたとき、奇妙な問題に遭遇するとは思いませんでした。環境の問題ですか?

正規表現「/_d+xd+/」の途中にある x を削除すると、通常どおりに置き換えることができ、出力は「http://img2.com.cn/images/2014/038」になります。 /422/14058002224830.9000001763_200x200x100.jpg" ";

とても奇妙です、この「x」は誰を怒らせたのですか?

正規表現「/_d+xd+/」の途中にある x を削除すると、通常どおりに置き換えることができ、出力は「http://img2.com.cn/images/2014/038」になります。 /422/14058002224830.9000001763_200x200x100.jpg" ";

とても奇妙です、この「x」は誰を怒らせたのですか?

つまり、正規表現に何か問題があるということです

では、なぜ次のように値を直接割り当てる必要があるのでしょうか:

$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg ';

問題ありません。

教えていただいたものにはエラーは見当たりません。慎重にデバッグしてください


var_dump($r['thumb']);

結果を投稿してください

string(85) " http:// img2 .com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"
文字列は 76 文字しかありませんが、なぜ string(85) なのでしょうか?

通常のことが理解できない場合は、ソースから始めるしかありません
$str = '_100x100.jpg';
echo preg_replace('/_/', '', $str); /_d+/' , '', $str);
echo preg_replace('/_d+x/', '', $str);
echo preg_replace('/_d+xd+/', '', $str);
どれを見てください 質問がある場合は、理解できたら試してください...


var_dump($r['thumb'])
結果を投稿してください


string(85) " http://img2 .com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"
文字列は 76 文字しかありませんが、なぜ string(85) なのでしょうか?

これは本当に奇妙で、最終的には正規表現「/_d+.{6}d+/」で解決されました。おそらくphpの関数で、6つの未知のものによって「x」が生成されます。 85-76=9、9 である必要があります。最後の 3 つは数字でも構いません。

「x」は他の 9 文字に変換されたことが判明しました。これは、エンコーディングの違いが原因である可能性があります。

「x」は、他の 9 文字に変換されたことが判明しました。これは、エンコーディングの違いが原因である可能性があります。


訂正、「x」 生成された 6 つは正しいです、

string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"、以下の文字が修正されました人為的に削除された 3

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。