PHP / regex: Как получить строковое значение тега HTML?

Мне нужна помощь по регулярному выражению или preg_match потому что я еще не настолько опытен в отношении тех, вот моя проблема.

Мне нужно получить значение «получить меня», но я думаю, что моя функция имеет ошибку. Число 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; ?> 

Это должно делать свое дело

В вашем шаблоне вы просто хотите сопоставить весь текст между двумя тегами. Таким образом, вы можете использовать, например, [\w\W] для соответствия всем символам.

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

Попробуй это

 $str = '<option value="123">abc</option> <option value="123">aabbcc</option>'; preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo); print_r($foo[1]); 

Поскольку значения атрибутов могут содержать простой символ, попробуйте это регулярное выражение:

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

Но регулярные выражения не подходят для синтаксического анализа нерегулярных языков, таких как HTML. Вам лучше использовать парсер, например SimpleXML или DOMDocument .

Следующие фрагменты 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); 

Он вернет «НЕКОТОРЫЙ ТЕКСТ».

С Уважением,

Web-Farmer @ letsnurture.com

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