Preg在同一个文件中匹配几次

时间:2014-05-29 09:25:09

标签: php regex preg-match

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

3 个答案:

答案 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);