web-dev-qa-db-ja.com

PHP / regex:HTMLタグの文字列値を取得する方法は?

正規表現または 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;
?>
34
marknt15
<?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;
?>

それはトリックを行う必要があります

66
takete.dk

これを試して

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

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

print_r($foo[1]);
9
pkwebmarket

パターンでは、単に2つのタグ間ですべてのテキストと一致させたいだけです。したがって、たとえば[\w\W]を使用して、すべての文字を一致させることができます。

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

属性値には>文字が含まれている可能性があるため、次の正規表現を試してください。

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

ただし、正規表現は、HTMLのような非正規言語の解析には適していません。 SimpleXML または DOMDocument のようなパーサーを使用することをお勧めします。

2
Gumbo
$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
    }
}
0
Xman Classical

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

0
Darren Li

次の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」を返します。

よろしく、

Web-Farmer @ letsnurture.com

0
Letsnurture