J'ai besoin d'aide sur regex ou preg_match
parce que je ne suis pas encore expérimenté en ce qui concerne ces problèmes, voici donc mon problème.
Je dois obtenir la valeur "get me" mais je pense que ma fonction a une erreur . Le nombre de balises html est dynamique. Il peut contenir plusieurs balises HTML imbriquées, comme une balise gras. En outre, la valeur "get me" est dynamique.
<?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;
?>
Cela devrait faire l'affaire
Essaye ça
$str = '<option value="123">abc</option>
<option value="123">aabbcc</option>';
preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo);
print_r($foo[1]);
Dans votre modèle, vous voulez simplement faire correspondre tout le texte entre les deux balises. Ainsi, vous pouvez utiliser par exemple un [\w\W]
pour faire correspondre tous les caractères.
function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}
Étant donné que les valeurs d'attribut peuvent contenir un caractère >
simple, essayez cette expression régulière:
$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
Mais les expressions régulières ne conviennent pas à l'analyse de langages non réguliers tels que HTML. Vous devriez mieux utiliser un analyseur tel que SimpleXML ou DOMDocument .
$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
}
}
essayez $pattern = "<($tagname)\b.*?>(.*?)</\1>"
et return $matches[2]
Les extraits de code php suivants renvoient le texte entre les balises/éléments HTML.
regex: "/tagname(.*)endtag/" retournera le texte entre les balises.
c'est à dire.
$regex="/[start_tag_name](.*)[/end_tag_name]/";
$content="[start_tag_name]SOME TEXT[/end_tag_name]";
preg_replace($regex,$content);
Il retournera "QUELQUE TEXTE".
Cordialement,
Web-Farmer @ Letsnurture.com