PHP/regex: Как получить строковое значение тега HTML?
Мне нужна помощь по регулярному выражению или preg_match
, потому что я еще не настолько разбираюсь в этом, поэтому вот моя проблема.
Мне нужно получить значение "получить меня", но я думаю, что моя функция имеет ошибку.
Число html-тегов является динамическим. Он может содержать много вложенных тегов html, как жирный тег. Кроме того, значение "получить меня" является динамическим.
<?php
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname>(.*?)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
$txt = getTextBetweenTags($str, "font");
echo $txt;
?>
Ответы
Ответ 1
<?php
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
$txt = getTextBetweenTags($str, "font");
echo $txt;
?>
Это должно сделать трюк
Ответ 2
Попробуйте это
$str = '<option value="123">abc</option>
<option value="123">aabbcc</option>';
preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo);
print_r($foo[1]);
Ответ 3
В вашем шаблоне вы просто хотите сопоставить весь текст между двумя тегами. Таким образом, вы можете использовать, например, [\w\W]
для соответствия всем символам.
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
Ответ 4
Так как значения атрибута могут содержать простой символ >
, попробуйте это регулярное выражение:
$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
Но регулярные выражения не подходят для синтаксического анализа нерегулярных языков, таких как HTML. Вам лучше использовать парсер, например SimpleXML или DOMDocument.
Ответ 5
Следующие фрагменты php возвращают текст между тегами html/elements.
regex: "/tagname(.*)endtag/" вернет текст между тегами.
то есть.
$regex="/[start_tag_name](.*)[/end_tag_name]/";
$content="[start_tag_name]SOME TEXT[/end_tag_name]";
preg_replace($regex,$content);
Он вернет "НЕКОТОРЫЙ ТЕКСТ".
Привет,
Web-Farmer
@Letsnurture.com
Ответ 6
$userinput = "http://www.example.vn/";
//$url = urlencode($userinput);
$input = @file_get_contents($userinput) or die("Could not access file: $userinput");
$regexp = "<tagname\s[^>]*>(.*)<\/tagname>";
//==Example:
//$regexp = "<div\s[^>]*>(.*)<\/div>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
// $match[2] = link address
// $match[3] = link text
}
}
Ответ 7
попробуйте $pattern = "<($tagname)\b.*?>(.*?)</\1>"
и return $matches[2]