<b>Text 1</b><br><i>Text 2</i>
Some text - very long and not interesting.
<b>Text 3</b><br><i>Text 4</i>
使用preg match功能时,如何一次性使用文本1,文本2,文本3和文本4?
答案 0 :(得分:1)
$pattern = '<b>([^<]+)</b><br><i>([^<]+)</i>';
preg_match_all($pattern, $string, $matches);
结果是$匹配。是的,改为使用DOM解析器。
答案 1 :(得分:0)
试试:
$input = '<b>Text 1</b><br><i>Text 2</i>
Some text - very long and not interesting.
<b>Text 3</b><br><i>Text 4</i>';
$dom = new DOMDocument();
$dom->loadHTML($input);
$xpath = new DOMXpath($dom);
$items = $xpath->query('//i | //b');
$output = [];
foreach ($items as $item) {
$output[] = $item->textContent;
}
var_dump($output);
输出:
array (size=4)
0 => string 'Text 1' (length=6)
1 => string 'Text 2' (length=6)
2 => string 'Text 3' (length=6)
3 => string 'Text 4' (length=6)
答案 2 :(得分:0)
不清楚为什么你不想既不使用DOM
也不使用preg_match_all
,而是使用preg_match
,它就像是:
$s = 'YOUR INPUT';
$pos = 0;
$res = [];
while(preg_match('/<[bi]>(.*?)<\/[bi]>/m', $s, $vals, PREG_OFFSET_CAPTURE, $pos))
{
$pos = $vals[1][1];
$res[] = $vals[1][0];
}
print_r($res);