我是Regex的新手。我有一个字符串:
Hello <b>ABCD</b> World
or
<b>ABCD</b>Hello World
我基本上希望将文本保留在粗体标记内,但删除字符串中的所有其他字符。
我找到了删除字符串中粗体部分的代码:
$string = 'This is <b>an</b> example <b>text</b>';
echo preg_replace('/(<b>.+?)+(<\/b>)/i', '', $string);
那么如何让它以相反的方式运作呢?
此致 艾哈迈尔
答案 0 :(得分:6)
如果要从HTML或XML文档中提取数据,请使用DOM
解析器而不是正则表达式。虽然正则表达式也可以在简单的情况下工作,但如果用例变得更复杂或输入数据以意想不到的方式发生变化,则会变得奇怪。 DOM
解析器更稳定,更方便。
示例代码:
$doc = new DOMDocument();
$doc->loadHTML('Hello <b>ABCD</b> World');
foreach($doc->getElementsByTagName('b') as $element) {
echo $element->nodeValue;
}
答案 1 :(得分:2)
使用preg_match_all:
preg_match_all("'<b>(.*?)</b>'si", $text, $match);
foreach($match[1] as $val)
{
echo $val."<br>";
}
答案 2 :(得分:1)
试试这个
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
preg_match_all($pattern, $string, $matches);
return $matches[1];
}
$str = 'This is <b>an example text</b>';
$txt = getTextBetweenTags($str, "b");
print_r($txt);