我有一个包含3个trs的字符串变量:
$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';
我尝试拆分字符串以获得3 <tr>...</tr>
个标签。
我试过了:
$match = preg_split('[(<tr[^>]*>.*?</tr>)]', $string , NULL, PREG_SPLIT_DELIM_CAPTURE);
但我没有取得好成绩。
感谢您的帮助。
答案 0 :(得分:3)
尝试
$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';
$result = array_filter(explode('</tr>', str_replace('<tr>','',$string)));
print_r($result);
希望它有所帮助:)
答案 1 :(得分:1)
我不建议使用正则表达式来解析你的HTML,但是如果你想要的话,这是正确的方法:
$regexPattern = "/<tr>(.*?)<\\/tr>/";
$string = "<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>";
preg_match_all($regexPattern , $string , $matches);
根据要求,这里是包含标签的正则表达式:
$regexPattern = "/(<tr>.*?<\\/tr>)/";
祝你好运。
答案 2 :(得分:1)
你正在做的很好,只需使用PHP的array_filter方法
过滤掉空结果即
<?php
$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';
$match = array_filter(preg_split('[(<tr[^>]*>.*?</tr>)]', $string , -1, PREG_SPLIT_DELIM_CAPTURE));
print_r($match);
结果:
Array
(
[1] => <tr><td> Total 1 </td><td>779,00</td></tr>
[3] => <tr><td> Total 2 </td><td>867,25</td></tr>
[5] => <tr><td> Total 3 </td><td>939,00</td></tr>
)
答案 3 :(得分:0)
尝试匹配三个
preg_match_all('/<tr[^>]*>.*?<\/tr>/', $string , $match);
var_dump($match);
输出:
array(1) {
[0]=>
array(3) {
[0]=>
string(42) "<tr><td> Total 1 </td><td>779,00</td></tr>"
[1]=>
string(42) "<tr><td> Total 2 </td><td>867,25</td></tr>"
[2]=>
string(42) "<tr><td> Total 3 </td><td>939,00</td></tr>"
}
}