我有一个包含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"> 16GB/32GB/64GB/128GB</td>
</tr>';
从上面的字符串中,我想得到字符串"16GB/32GB/64GB/128GB"
任何人都可以让我知道我该怎么办?
编辑:
并说如果"16GB/32GB/64GB/128GB"
中有一些标签,
离。
<td class="table_line_x_h10" width="647" align="left"> 16GB/<span style="color:red;">32GB</span>/64GB<br/>128GB</td>
似乎模式$pattern = "/<td ?.*>(.*?)<\/td>/";
不起作用,我还能做什么呢?
答案 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
但仍然想知道有更好或更简单的方法吗?
好吧,我明白了...我真的很讨厌正常表达......
$pattern = '/[<td ?.*>](.*?)<\/td>/s';
如果包含其他标签的td标签之间的字符串...只是一个简单的[] ...
,这可以解决这种情况答案 1 :(得分:1)
如何使用preg_match_all:
$str='<td class="table_line_x_h10" width="647" align="left"> 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
)
)