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

时间:2014-05-22 15:10:36

标签: php regex

我想更改以下文字

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

为:

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

我尝试了什么:

$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 个答案:

答案 0 :(得分:1)

RegEx:

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

<强> PHP

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

说明:首先([^:]:)匹配并捕获1个非冒号字符后跟冒号。接下来是一些可选的空格(\s*)。然后我们lazily捕获0个字符(.*?)。最后,我们捕获换行符(<br\s*/>)或换行符(\R)。

注意:我使用了~分隔符,因此我们无需在换行符中转义/。我们对第二个捕获组使用延迟重复,因为它允许我们抓取所有直到换行符或新行。