Вы можете использовать вложенное понимание ist, проверяя, являются ли all
символы в строках (при условии, что все элементы являются строками) .
, а затем итерируя отдельные символы, в противном случае берется сам элемент.
>>> Item0, Item1 = "Item0", "Item1"
>>> lst = [Item0,'.','.','.','...','.',Item1,'.','.']
>>> [y for x in lst for y in (x if all(c=='.' for c in x) else [x])]
['Item0', '.', '.', '.', '.', '.', '.', '.', 'Item1', '.', '.']
<?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];
}
Следующие ниже фрагменты 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 @ Letnurture.com
Поскольку значения атрибутов могут содержать простой символ >
, попробуйте это регулярное выражение:
$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
Но регулярные выражения не подходят для синтаксического анализа нерегулярных языков, таких как HTML. Вам лучше использовать парсер, например SimpleXML или DOMDocument .