为什么这样写不行,错在哪里?

来源:3-7 正则表达式的搜索和替换

三只松鼠

2016-01-18 17:02

<?php
$str = '主要有以下几个文件:index.php, style.css, common.js';
//将目标字符串$str中的文件名替换后增加em标签
$pattern = '/(\w+\.\w+),(\w+\.\w+),(\w+\.\w+)/';
$replace = '<em>$1</em>,<em>$2</em>,<em>$3</em>';
echo preg_replace($pattern,$replace,$str);


写回答 关注

4回答

  • PHP河马
    2016-01-30 17:29:59
    已采纳

    错了:

    1. 你的“,”没有转义。

    2. “,”后面的空格也没有去检测。

    我的demo:

    $str = '主要有以下几个文件:index.php, style.css, common.js';

    //将目标字符串$str中的文件名替换后增加em标签

    $p = '/(\w+\.\w+)\,\s(\w+\.\w+)\,\s(\w+\.\w+)/';

    $replace = '<em>$1</em> , <em>$2</em>, <em>$3</em>';

    preg_match($p,$str,$matches);

    echo preg_replace($p,$replace,$str);

    初学者,相互学习一下。

    三只松鼠

    发现逗号不用转义的,我记得要转义的是特殊字符也就是元字符,别的不需要转义

    2016-01-30 22:14:03

    共 2 条回复 >

  • polarbear_cry
    2016-03-26 17:18:07

    $pattern 中的两个,后边的空格你没有加上,加上就是对的,还有就是"."是不用转译的。更正后如下:

    $str = '主要有以下几个文件:index.php, style.css, common.js';

    //将目标字符串$str中的文件名替换后增加em标签

     $pattern = '/(\w+.\w+), (\w+.\w+), (\w+.\w+)/';

     $replace = '<em>$1</em>,<em>$2</em>,<em>$3</em>';

     echo preg_replace($pattern,$replace,$str);


  • 253376696
    2016-03-11 23:47:16

    因为你没有加空格,在逗号后面有个空格,加上你的就正确了

  • 慕神8718614
    2016-01-18 17:25:28

    这样写没错吧

    三只松鼠

    不行,要不你试试,我实在不知道错在哪里了

    2016-01-18 18:09:22

    共 1 条回复 >

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181724 学习 · 2575 问题

查看课程

相似问题