wake-up-neo.net

PHP/Regex: Wie erhalte ich den String-Wert des HTML-Tags?

Ich brauche Hilfe zu Regex oder preg_match , weil ich noch nicht so viel Erfahrung mit denen habe, also hier ist mein Problem.

Ich muss den Wert "get me" erhalten, aber ich denke, meine Funktion hat einen Fehler. Die Anzahl der HTML-Tags ist dynamisch. Es kann viele verschachtelte HTML-Tags enthalten, wie z. B. ein fetter Tag. Auch der "get me" -Wert ist dynamisch.

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

Das sollte den Trick tun

64
takete.dk

Versuche dies 

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

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

print_r($foo[1]);
9
pkwebmarket

In Ihrem Muster möchten Sie lediglich den gesamten Text zwischen den beiden Tags zuordnen. So könnten Sie beispielsweise einen [\w\W] verwenden, um alle Zeichen zu finden.

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

Da Attributwerte ein einfaches >-Zeichen enthalten können, versuchen Sie diesen regulären Ausdruck:

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

Reguläre Ausdrücke eignen sich jedoch nicht zum Analysieren nicht regulärer Sprachen wie HTML. Sie sollten besser einen Parser wie SimpleXML oder DOMDocument verwenden.

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

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

0
Darren Li

Die folgenden PHP-Snippets geben den Text zwischen HTML-Tags/-Elementen zurück.

regex: "/tagname(.*)endtag/" gibt Text zwischen Tags zurück.

d.h. 


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

Es wird "EINIGER TEXT" zurückgegeben.

Grüße,

Web-Farmer @ Letsnurture.com

0
Letsnurture