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

これはそれを行う必要があります:

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

編集
そして、ここに簡単なテストを行った後の出力があります。

于 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 に答える