PHP / regex:如何获取HTML标签的字符串值?

2021/01/12 21:21 · php ·  · 0评论

我需要有关正则表达式的帮助,或者preg_match因为我还没有足够的经验,所以这是我的问题。

我需要获取值“ get me”,但我认为我的函数有错误。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;
?>

<?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;
?>

这应该够了吧

尝试这个

$str = '<option value="123">abc</option>
        <option value="123">aabbcc</option>';

preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo);

print_r($foo[1]);

在您的模式中,您只想匹配两个标签之间的所有文本因此,您可以使用例如a[\w\W]来匹配所有字符。

function getTextBetweenTags($string, $tagname) {
    $pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    return $matches[1];
}

由于属性值可能包含普通>字符,请尝试以下正则表达式:

$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';

但是正则表达式不适合解析HTML等非正则语言。您最好使用诸如SimpleXMLDOMDocument之类的解析器

这可能很旧,但我的回答可能会对某人有所帮助

您可以简单地使用

$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
echo strip_tags($str);

https://www.php.net/manual/zh/function.strip-tags.php

$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
    }
}

尝试$pattern = "<($tagname)\b.*?>(.*?)</\1>"return $matches[2]

以下php代码段将返回html标记/元素之间的文本。

regex:“ /tagname(.*)endtag/”将在标签之间返回文本。

$regex="/[start_tag_name](.*)[/end_tag_name]/";
$content="[start_tag_name]SOME TEXT[/end_tag_name]";
preg_replace($regex,$content); 

它将返回“ SOME TEXT”。

本文地址:http://php.askforanswer.com/php-regexruhehuoquhtmlbiaoqiandezifuchuanzhi.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!