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


php find a string contains a keyword and get the string between tags

>我有一个包含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>/";不起作用,那么我还能做什么呢?

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

$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标签之间的字符串包含其他标签的情况...只是一个简单的 []...

如何使用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
        )
)