我需要有关正则表达式或preg_match
的帮助,因为我对此没有经验,所以这就是我的问题。
我需要获取值“get me”但我认为我的函数有错误。 html标签的数量是动态的。它可以包含许多嵌套的html标记,如粗体标记。此外,“get me”值是动态的。
<?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;
?>
答案 0 :(得分:65)
<?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 :(得分:9)
试试这个
$str = '<option value="123">abc</option>
<option value="123">aabbcc</option>';
preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo);
print_r($foo[1]);
答案 2 :(得分:8)
在您的模式中,您只想匹配两个标记之间的所有文本。因此,您可以使用[\w\W]
来匹配所有字符。
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
答案 3 :(得分:2)
由于属性值可能包含普通>
字符,请尝试使用此正则表达式:
$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
但是正则表达式不适合解析像HTML这样的非常规语言。您最好使用SimpleXML或DOMDocument等解析器。
答案 4 :(得分:1)
这可能很旧,但我的回答可能会对某人有所帮助
您可以简单地使用
$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
echo strip_tags($str);
答案 5 :(得分:0)
以下php代码段将在html标记/元素之间返回文本。
正则表达式:“/ pubngn。(。*)/ title /”将在标签之间返回文字。
即。
$regex="/[start_tag_name](.*)[/end_tag_name]/";
$content="[start_tag_name]SOME TEXT[/end_tag_name]";
preg_replace($regex,$content);
它将返回“SOME TEXT”。
此致
Web的农民 @ letsnurture.com
答案 6 :(得分:0)
$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 :(得分:0)
尝试$pattern = "<($tagname)\b.*?>(.*?)</\1>"
和return $matches[2]
答案 8 :(得分:0)
你的 HTML
$html='<ul id="main">
<li>
<h1><a href="[link]">My Title</a></h1>
<span class="date">Date</span>
<div class="section">
[content]
</div>
</li>
</ul>';
//函数调用你可以改变标签名称
echo contentBetweenTags($html,"span");
// 此函数将帮助您从特定标签中获取数据
function contentBetweenTags($content, $tagname){
$pattern = "#<\s*?$tagname\b[^>]*>(.*?)</$tagname\b[^>]*>#s";
preg_match($pattern, $content, $matches);
if(empty($matches))
return;
$str = "<$tagname>".html_entity_decode($matches[1])."</$tagname>";
return $str;
}