dongtiannai0654 2014-05-22 07:10
浏览 195
已采纳

正则表达式:匹配所有内容:直到 或<br />

I would like to change the following text

тест: фыв, фыв <br />
тест: фыв, фыв, фывфыв фыв, фыв, фыв <br />
счет: 123 <br />
высота: 111 <br />
конец: ок <br />

to:

тест: :: фыв, фыв :: <br />
тест: :: фыв, фыв, фывфыв фыв, фыв, фыв :: <br />
счет: :: 123 :: <br />
высота: :: 111::  <br />
конец: :: ок :: <br />

what I've tried:

$text = <<<HTML
    тест<br /><br />тест: фыв, фыв<br />тест: фыв, фыв, фывфыв фыв, фыв, фыв<br /><br />счет: 123<br />высота: 111 <br />конец: ок<br /><br />
HTML;

$text = preg_replace('~(\w+:)\s*(.*?)(\<br /\>|\R)~', '\1 :: \2 :: \3', $text);

echo $text;
  • 写回答

1条回答 默认 最新

  • dplase3140 2014-05-22 07:18
    关注

    RegEx:

    ([^:]+:)\s*(.*?)(<br\s*/>|\R)
    \1 :: \2 :: \3
    

    PHP:

    $row['text'] = preg_replace('~([^:]+:)\s*(.*?)(<br\s*/>|\R)~', '\1 :: \2 :: \3', $row['text']);
    

    Explanation: First ([^:]:) we match and capture 1+ non-colon characters followed by a colon. This is followed by some optional whitespace (\s*). Then we lazily capture 0+ characters (.*?). Finally we capture either the line break (<br\s*/>) or the new line (\R).

    Notes: I used ~ delimiters so that we didn't need to escape the / in the line break. We use lazy repetition for the second capture group because it lets us grab everything until the line break or new line.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部