被PHP的正則打敗了。。。

來源:互聯網
上載者:User
我簡單的匹配abba 這樣的4個連續的數字,裡面使用了子運算式和反向引用,結果沒有捕獲到,真不知道為什麼,我哪裡寫錯了?

";


回複討論(解決方案)

可以呀

$str="fdsafsdafsgfdag1223fa1551sdfassd3265";$mycon="這是數字";$str=preg_replace('/(\d)(\d)\2\1/',$mycon,$str);echo $str."
";
fdsafsdafsgfdag1223fa這是數字sdfassd3265


但直接複製你的代碼就不行
估計是你的編輯器有問題

嗯,是雙引號的問題
在雙引號中字元的轉義符生效了

$a = "/(\d)(\d)\2\1/";$b = '/(\d)(\d)\2\1/';var_dump($a == $b);var_dump($a, $b);
bool(false) string(12) "/(\d)(\d)/" string(14) "/(\d)(\d)\2\1/"

要這樣
$a = "/(\d)(\d)\\2\\1/";$b = '/(\d)(\d)\2\1/';var_dump($a == $b);var_dump($a, $b);
bool(true) string(14) "/(\d)(\d)\2\1/" string(14) "/(\d)(\d)\2\1/"

所以你會看到一些Regex中會有一連串的 \
\\\、\\\\....
總之是不對就加一個

我簡單的匹配abba 這樣的4個連續的數字,裡面使用了子運算式和反向引用,結果沒有捕獲到,真不知道為什麼,我哪裡寫錯了?

";

PHP中使用正則建議使用單引號,即:

$str="fasdgasgdfgfduuuuuu1221uuuuufasdfsdfsdaf4444";$mypreg='/(\d)\1{3}/i';$mycon="這是數字";echo $str."
"; $str=preg_replace($mypreg,$mycon,$str);echo $str."
";


因為PHP的\在雙引號中會起轉義作用
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.