Say I have the following text
说我有以下文字
..(content).............
<A HREF="http://foo.com/content" >blah blah blah </A>
...(continue content)...
I want to delete the link and I want to delete the tag (while keeping the text in between). How do I do this with a regular expression (since the URLs will all be different)
我想删除链接,我想删除标签(同时保持文本之间)。如何使用正则表达式执行此操作(因为URL将全部不同)
Much thanks
非常感谢
8 个解决方案
#1
16
Avoid regular expressions whenever you can, especially when processing xml. In this case you can use strip_tags()
or simplexml, depending on your string.
尽可能避免使用正则表达式,尤其是在处理xml时。在这种情况下,您可以使用strip_tags()或simplexml,具体取决于您的字符串。
#2
15
This will remove all tags:
这将删除所有标签:
preg_replace("/<.*?>/", "", $string);
This will remove just the <a>
tags:
这将只删除标签:
preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $string);
#3
4
<?php
//example to extract the innerText from all anchors in a string
include('simple_html_dom.php');
$html = str_get_html('<A HREF="http://foo.com/content" >blah blah blah </A><A HREF="http://foo.com/content" >blah blah blah </A>');
//print the text of each anchor
foreach($html->find('a') as $e) {
echo $e->innerText;
}
?>
请参阅PHP Simple DOM Parser。
#4
3
Not pretty but does the job:
不漂亮,但做的工作:
$data = str_replace('</a>', '', $data);
$data = preg_replace('/<a[^>]+href[^>]+>/', '', $data);
#6
0
I use this to replace the anchors with a text string...
我用它来用文本字符串替换锚点...
function replaceAnchorsWithText($data) {
$regex = '/(<a\s*'; // Start of anchor tag
$regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist
$regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link
$regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag
$regex .= '(?P<name>\S+)'; // Grab the name
$regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive)
if (is_array($data)) {
// This is what will replace the link (modify to you liking)
$data = "{$data['name']}({$data['link']})";
}
return preg_replace_callback($regex, array('self', 'replaceAnchorsWithText'), $data);
}
#7
0
$pattern = '/href="([^"]*)"/';
#8
-2
use str_replace
使用str_replace
#1
16
Avoid regular expressions whenever you can, especially when processing xml. In this case you can use strip_tags()
or simplexml, depending on your string.
尽可能避免使用正则表达式,尤其是在处理xml时。在这种情况下,您可以使用strip_tags()或simplexml,具体取决于您的字符串。
#2
15
This will remove all tags:
这将删除所有标签:
preg_replace("/<.*?>/", "", $string);
This will remove just the <a>
tags:
这将只删除标签:
preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $string);
#3
4
<?php
//example to extract the innerText from all anchors in a string
include('simple_html_dom.php');
$html = str_get_html('<A HREF="http://foo.com/content" >blah blah blah </A><A HREF="http://foo.com/content" >blah blah blah </A>');
//print the text of each anchor
foreach($html->find('a') as $e) {
echo $e->innerText;
}
?>
请参阅PHP Simple DOM Parser。
#4
3
Not pretty but does the job:
不漂亮,但做的工作:
$data = str_replace('</a>', '', $data);
$data = preg_replace('/<a[^>]+href[^>]+>/', '', $data);
#5
#6
0
I use this to replace the anchors with a text string...
我用它来用文本字符串替换锚点...
function replaceAnchorsWithText($data) {
$regex = '/(<a\s*'; // Start of anchor tag
$regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist
$regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link
$regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag
$regex .= '(?P<name>\S+)'; // Grab the name
$regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive)
if (is_array($data)) {
// This is what will replace the link (modify to you liking)
$data = "{$data['name']}({$data['link']})";
}
return preg_replace_callback($regex, array('self', 'replaceAnchorsWithText'), $data);
}
#7
0
$pattern = '/href="([^"]*)"/';
#8
-2
use str_replace
使用str_replace