我需要找到一个正则表达式来用于查找PHP中使用的内容和标记。我试过......
preg_split("<td>([^\"]*)</td>", $table[0]);
但是这给了我PHP错误......
Warning: preg_split(): Unknown modifier '(' in C:\xampp\htdocs\.....
谁能告诉我我做错了什么?
答案 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)
);