1

我有一个字符串

abcd : 12
<br />
cc : 25
<br />
some : 0
<br />
make : 02.36
<br />
Kk : 11.00
<br />
mm : 0

我想删除所有有: 0

我试试

$ragid  = "|<br />s*(.*?) : 0 s*(.*?)<br />|i"; 
$text=preg_replace($ragid,"",$text);

但它替换了所有字符串的开头<br />和结尾<br />

它不符合我想要的完美。有什么解决方案吗?

4

4 回答 4

2

This should do it:

preg_replace('/(^|<br\s*\/?>)\s*(.*?)\s*:\s*0(\s+|$)/i', '', $str);

EDIT
And here is the output after doing a quick test.

于 2012-04-17T08:05:32.900 回答
1

如果您使用 PCRE 的多行模式(m-modifier ),每行很容易:

~^.*$~m

这将使^行首和行尾匹配$

: 0因此,要匹配末尾包含的所有行:

~^(.*: 0$\n?)~m

如果您需要更多的行尾兼容性,您可以使用\R而不是\n使行尾可配置。该选项(*ANYCRLF)还暗示了内容^$含义:

~(*ANYCRLF)^(.*: 0$\R?)~m

例子:

$str = <<<STR
abcd : 12
<br />
cc : 25
<br />
some : 0
<br />
make : 02.36
<br />
Kk : 11.00
<br />
mm : 0
STR;

echo preg_replace('~(*ANYCRLF)^(.*: 0$\R?)~m', '', $str);

输出:

abcd : 12
<br />
cc : 25
<br />
<br />
make : 02.36
<br />
Kk : 11.00
<br />
于 2012-04-17T09:48:03.777 回答
0

我认为您正在寻找的表达是这样的:/.* : 0\n/i

于 2012-04-17T08:01:10.647 回答
0

干得好:

$text = preg_replace('~<br />\s[^:]* : 0\s?~', '', $text);
于 2012-04-17T08:08:16.810 回答