内部和内容的正则表达式

时间:2014-02-14 13:19:37

标签: php html regex parsing

我需要找到一个正则表达式来用于查找PHP中使用的内容和标记。我试过......

preg_split("<td>([^\"]*)</td>", $table[0]);

但是这给了我PHP错误......

Warning: preg_split(): Unknown modifier '(' in C:\xampp\htdocs\.....

谁能告诉我我做错了什么?

4 个答案:

答案 0 :(得分:1)

试试这个:

preg_match("/<td>([^\"]*)<\/td>/", $table[0], $matches);

但是,作为一般规则,do not try to parse HTML with regexes ......: - )

答案 1 :(得分:0)

使用preg_match代替preg_split

preg_match("|<td>([^<]*)</td>|", $table[0], $m);
print_r($m);

答案 2 :(得分:0)

请注意,您需要做一些额外的工作,以确保正则表达式中*<td>之间的</td>不会覆盖整行<td>some text</td> 1}}。那是因为*非常贪心。

要切断*的贪婪,你可以在它之后放一个? - 这告诉它只是抓住它直到第一次到达*之后的任何地方。所以,你正在寻找的正则表达式是这样的:

/<td>(.*?)<\/td>/

请记住,由于正则表达式以/开头和结尾,因此您必须注意正则表达式中的任何/ - 它们必须被转义。因此,\/

从您的正则表达式看来,您似乎也试图排除"<td>之间的任何</td>字符 - 这是正确的吗?如果是这种情况,您可以更改正则表达式以使用以下内容:

/<td>([^\"]*?)<\/td>/

但是,假设您不想在匹配中排除"字符,那么您的PHP代码可能如下所示,使用preg_match_all代替{{1 }}

preg_match

您要找的是preg_match_all("/<td>(.*?)<\/td>/", $str, $matches); print_r($matches);

答案 3 :(得分:0)

首先,你忘了用分隔符包装正则表达式。此外,您不应在正则表达式中指定结束td标记。

尝试以下代码。假设$table[0]包含<table></table>标记之间的html,它允许从表格的单元格中提取任何内容(包括html):

$a_result = array_map(
    function($v) { return preg_replace('/<\/td\s*>/i', '', $v); },
    array_slice(preg_split('/<td[^>]*>/i', $table[0]), 1)
);