php найти строку, содержащую ключевое слово и получить строку между тегами
У меня была строка, содержащая 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>/";
не будет работать, так что же еще я могу сделать?
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 содержит другие теги... просто простой []...
Как насчет использования 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 ) )