被PHP的正則挫敗了。

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

header("Content-type:text/html;charset=utf-8");
$str="fdsafsdafsgfdag1223fa1551sdfassd3265";
$mypreg="/(\d)(\d)\2\1/";//匹配abba式的數字,即上面的1551
$mycon="這是數字";
$str=preg_replace($mypreg,$mycon,$str);
echo $str."
";

分享到:


------解決方案--------------------
嗯,是雙引號的問題
在雙引號中字元的轉義符生效了
$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個連續的數字,裡面使用了子運算式和反向引用,結果沒有捕獲到,真不知道為什麼,我哪裡寫錯了?

header("Content-type:text/html;charset=utf-8");
$str="fdsafsdafsgfdag1223fa1551sdfassd3265";
$mypreg="/(\d)(\d)\2\1/";//匹配abba式的數字,即上面的1551
$mycon="這是數字";
$str=preg_replace($mypreg,$mycon,$str);
echo $str."
";

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.