PHP:正则表达式和特定标签剥离

时间:2010-12-10 13:57:02

标签: php regex preg-replace

我正在寻找一种去除所有锚标签的方法,我也希望删除从','到<br>的所有内容,但<br>应保持不变。

脏输入:

Abstractor HLTH<br>
Account Representative, Major <a href="#P">P</a><br>
Accountant <a href="#NP">NP</a>, <a href="#M">M</a>, <a href="#REA">REA</a>, <a href="#SKI">SKI</a><br>

应该是这样的:

Abstractor HLTH<br>
Account Representative<br>
Accountant <br>

请帮忙!

- 以下是脏文:

$str = sprintf('

Abstractor HLTH<br>
Account Representative, Major <a href="#P">P</a><br>

Accountant <a href="#NP">NP</a>, <a href="#M">M</a>, <a href="#REA">REA</a>, <a href="#SKI">SKI</a><br>
Accountant, Cost I & II (See Cost Accountant I, II) <a href="#FR">FR</a><br>
Accountant, General <a href="#G">G</a><br>
Accountant, General I (Junior) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a><br>

Accountant, General II (Intermediate) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a>, <a href="#HA">HA</a> <br>
Accountant, General III (Senior) (See General Accountant) <a href="#FR">FR</a>, <a href="#O/G">O/G</a>, <a href="#W">W</a> <br>

');

6 个答案:

答案 0 :(得分:1)

我强烈建议您使用 HTML Purifier http://htmlpurifier.org/

设置起来相当简单,声誉卓着,功能强大。

答案 1 :(得分:1)

通常使用正则表达式来处理HTML字符串是不好的,但假设您的所有链接都是这样形成的,那么使用preg_replace() 就不会出现问题。试试这个

// Removes all links
$str = preg_replace("/<a href=\"#([A-Z\\/]+?)\">\\1<\\/a>(?:, )?/i", "", $str);

// Strip the comma and everything from the comma
// to the next <br> in the line
$str = preg_replace("/,(.*?)(?=<br>)/i", "", $str);

建议strip_tags()的其他答案:它不会删除它剥离的一对HTML标记所包含的文本。例如

Accountant <a href="#NP">NP</a>

变为

Accountant NP

这不是OP想要的。

答案 2 :(得分:0)

strip-tags()用于标记str_replace()strpos()用于其他标记。

答案 3 :(得分:0)

HTML Purifier是你的朋友。它有灵活的选择,非常复杂。使用str_replace或正则表达式执行此类操作错误

答案 4 :(得分:0)

$clean_string = strip_tags($original_string, '<br>');

这将除去br标签之外的一切。

正如KingCrunch所说,其余为str_replacestrpos

答案 5 :(得分:0)

strip_tags有第二个参数,允许您提供一串允许的标记。除了你提供的标签之外,它将删除所有标签:

$string = strip_tags($string, '<br>'); // will leave <br>-tags in place