dongtiannai0654 2014-05-22 15: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 15: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.

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

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算