2

我有一个包含 html 标签的字符串,我想获取其中包含关键字的整个字符串"GB"

有时在 中 有不同的类或样式属性<td>,并且标签之间可能有不同的容量,所以我想找到"GB"or"gb"然后在">"and之间获取整个字符串"<"......但只是不知道如何......

我的字符串示例如下所示:

$str='<tr>
    <td class="table_title13_bg_gray_line" width="171" align="left">Capacity</td>
    <td class="table_line_x_h10" width="647" align="left">&nbsp;16GB/32GB/64GB/128GB</td>
</tr>';

从上面的字符串中,我想得到字符串"16GB/32GB/64GB/128GB" 谁能告诉我我该怎么做?

编辑:并说如果有一些标签"16GB/32GB/64GB/128GB"

前任。 <td class="table_line_x_h10" width="647" align="left">&nbsp;16GB/<span style="color:red;">32GB</span>/64GB<br/>128GB</td>

似乎模式$pattern = "/<td ?.*>(.*?)<\/td>/";不起作用,那我还能做什么?

4

2 回答 2

2

刚刚尝试并自己解决了这个问题......在这里回答并希望它对其他人有用。

$pattern = "/<td ?.*>(.*)<\/td>/";
preg_match_all($pattern, $str, $matches);
foreach( $matches[0] as $key=>$val){ 
    if(preg_match('/GB/i',$val)){
        echo $val;
    }
}
//output: 16GB/32GB/64GB/128GB

但仍然想知道有没有更好或更简单的方法?

编辑:

好的,我明白了...我真的很讨厌正则表达式...

$pattern = '/[<td ?.*>](.*?)<\/td>/s';

这可以解决如果 td 标签之间的字符串包含其他标签...只是一个简单的 []...

于 2013-10-18T02:07:57.123 回答
1

如何使用preg_match_all

$str='<td class="table_line_x_h10" width="647" align="left">&nbsp;16GB/<span style="color:red;">32GB</span>/64GB<br/>128GB</td>';
preg_match_all('/(\d+GB)/i', $str, $m);
print_r($m);                                                          

输出:

Array
(
    [0] => Array
        (
            [0] => 16GB
            [1] => 32GB
            [2] => 64GB
            [3] => 128GB
        )

    [1] => Array
        (
            [0] => 16GB
            [1] => 32GB
            [2] => 64GB
            [3] => 128GB
        )

)
于 2013-10-18T08:48:10.443 回答