Domanda PHP / regex: come ottenere il valore stringa del tag HTML?


Ho bisogno di aiuto su regex o preg_match perché non sono ancora così esperto riguardo a quelli così qui è il mio problema.

Devo ottenere il valore "get me", ma penso che la mia funzione abbia un errore. Il numero di tag html è dinamico. Può contenere molti tag html nidificati come un tag grassetto. Inoltre, il valore "get me" è dinamico.

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

30
2018-05-06 09:47


origine


risposte:


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

Questo dovrebbe fare il trucco


60
2018-05-06 09:58



Prova questo

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

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

print_r($foo[1]);

9
2018-01-21 21:39



Nel tuo schema, vuoi semplicemente abbinare tutto il testo tra i due tag. Quindi, potresti usare per esempio a [\w\W] per abbinare tutti i personaggi.

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

8
2018-05-06 09:58



Poiché i valori degli attributi possono contenere un piano > personaggio, prova questa espressione regolare:

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

Ma le espressioni regolari non sono adatte per l'analisi di linguaggi non regolari come HTML. Dovresti usare meglio un parser come SimpleXML o DOMDocument.


2
2017-09-22 05:36



I seguenti frammenti php restituirebbero il testo tra tag / elementi html.

regex: "/tagname(.*)endtag/" restituirà il testo tra i tag.

cioè


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

Restituirà "ALCUN TESTO".

Saluti,

Web-Farmer @ letsnurture.com


0
2017-07-03 14:59



$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
2018-01-11 02:47



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


0
2017-08-06 21:22