匹配正则表达式与PHP

时间:2014-06-10 07:54:18

标签: php regex preg-match

我使用preg_match得到2个结果,我不明白为什么。这是我的代码:

$pattern = "\[precom\]([A-Za-z]|\(|\)|[0-9]|\s|\*)*\[\/precom\]";
$data = "[precom](homme) Cher monsieur $name[/precom] ";
preg_match("/" . $pattern . "/", $data, $m);
print_r($m);

结果如下:

Array ( [0] => [precom](homme) Cher monsieur *name[/precom] [1] => e ) 

有人可以帮我找到问题吗?

2 个答案:

答案 0 :(得分:4)

您不应该使用正则表达式解析HTML(或BBCode等)。试试:

$input = '[precom](homme) Cher monsieur $name[/precom]';
$dom   = new DOMDocument();
$dom->loadHTML(str_replace(array('[', ']'), array('<', '>'), $input));
$output = $dom->textContent;

var_dump($output);

输出:

string '(homme) Cher monsieur $name' (length=27)

答案 1 :(得分:2)

来自http://www.php.net//manual/en/function.preg-match.php

匹配

如果提供了匹配,那么它将填充搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches [1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。