Я новичок в 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);
Итак, как мне заставить работать работать наоборот?
С уважением Ахмар
Если вы хотите извлечь данные из HTML или XML-документа, используйте парсер DOM
вместо регулярного выражения. В то время как регулярное выражение будет работать и в простых случаях, оно может стать странным, если прецедент становится более сложным или неожиданные изменения входных данных. Парсер DOM
более стабилен и удобен для этой цели.
Пример кода:
$doc = new DOMDocument(); $doc->loadHTML('Hello <b>ABCD</b> World'); foreach($doc->getElementsByTagName('b') as $element) { echo $element->nodeValue; }
используйте preg_match_all:
preg_match_all("'<b>(.*?)</b>'si", $text, $match); foreach($match[1] as $val) { echo $val."<br>"; }
Попробуй это
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);