我有一个像
这样的字符串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 />
它与我想要的完美不符。 任何解决方案?
答案 0 :(得分:2)
这应该这样做:
preg_replace('/(^|<br\s*\/?>)\s*(.*?)\s*:\s*0(\s+|$)/i', '', $str);
修改强>
并且在进行快速测试后here is the output。
答案 1 :(得分:1)
如果您使用PCRE的多行模式(m
- 修饰符),则每行很容易:
~^.*$~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 />
答案 2 :(得分:0)
我认为你正在寻找的表达方式是这样的:/.* : 0\n/i
答案 3 :(得分:0)
你走了:
$text = preg_replace('~<br />\s[^:]* : 0\s?~', '', $text);