php查找包含关键字的字符串并获取标记之间的字符串

时间:2013-10-17 10:29:28

标签: php string preg-match strpos strstr

我有一个包含html标签的字符串,我希望得到包含关键字"GB"的整个字符串。

有时<td>中有不同的类或样式属性,标记之间也可能有不同的容量,所以我想找"GB""gb"然后得到整个">""<"之间的字符串......但是根本不知道如何......

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

$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>/";不起作用,我还能做什么呢?

2 个答案:

答案 0 :(得分: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

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

EDITED:

好吧,我明白了...我真的很讨厌正常表达......

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

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

,这可以解决这种情况

答案 1 :(得分: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
        )

)