2010-12-10 44 views
4

我正在寻找一种方法来剥离所有锚标签,我也希望从','到<br>被删除,但<br>应该保持。PHP:正则表达式和特定标签剥离

脏输入:

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> 

'); 
+0

第一行读为: 我正在寻找一种方法来去除所有锚标记,我也希望从','到linebreak标记的所有内容都被删除,但换行符应该保持为thr。 – ehmad11 2010-12-10 14:01:02

+0

没有任何其他方式没有使用HTML净化器? ! – ehmad11 2010-12-10 14:11:08

+0

试试我的答案,看看它是否适合你。 – BoltClock 2010-12-10 14:15:30

回答

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想要什么。

+0

它忽略每局结束为止这是不希望.. 代码给出了这样的输出: 抽象的HLTH 客户代表 忽略“会计”,因为它的之间“”最后BR – ehmad11 2010-12-10 14:32:43

+0

@ ehmad1:你的意思是所有三条线都在一个单一的字符串? – BoltClock 2010-12-10 14:33:53

+0

是的所有行都在一个字符串中 – ehmad11 2010-12-10 14:37:09

0

strip-tags()的标签,str_replace()strpos()为其他的事情。

+0

strip_tags **仅限**允许某些标签保留,但OP要反向行为 – ajreal 2010-12-10 14:05:44

+0

哦,是的,没错。无论如何请留下答案,也许有人对此感兴趣。 – KingCrunch 2010-12-10 14:08:05

0

HTML Purifier是你的朋友。它有灵活的选择,并且非常复杂。用str_replace或正则表达式做这样的事情是错误

+0

我没有downvote,但为什么有一个HTML清洁剂回答upvote和downvote这一个? – BoltClock 2010-12-10 14:14:53

+0

Upvoting反击downvote。 – BoltClock 2010-12-10 14:27:49

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

这将除去br标签以外的所有东西。

正如KingCrunch所说,其余为str_replacestrpos

0

strip_tags有第二个参数,它允许你提供一个允许标签的字符串。这将去除所有标签,除非你提供的:

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