2016-10-06 2 views
-3

Я новичок в регулярном выражении.Регулярное выражение extract short match

Содержимое является

">blablabla</a> </td>blablabla "> 8.8GB </a> </td>

Я хочу, чтобы получить значение 8.8, но если я использую (?<=">)(.*?)(?=GB<\/a>), он получит тексты, прежде чем 8.8, а также, то есть. ">blablabla</a> </td>blablabla "> 8.8GB

Я не знаю, как это решить. Буду признателен за любую оказанную помощь.

+2

Если строка HTML, используйте [ 'DOMDocument'] (http://php.net/manual /en/domdocument.loadhtml.php) вместо regex – Mohammad

+0

[Сила регулярных выражений и HTML вместе в одном и том же концептуальном пространстве уничтожит ваш разум, как много водянистой замазки.] (http://stackoverflow.com/a/1732454/ 2370483) – Machavity

+2

спасибо chris85, он отлично работает LY! – Wendy

ответ

1

Вы могли бы использовать:

(\d+(?:\.\d+)?)[MKG]B 

извлечь целое значение перед блоком хранения.

\d любое количество.
+ - квантификатор, позволяющий использовать 1 или более номеров.
?: - группа, не связанная с захватом.
\. - буква ..
? делает десятичную часть (\.\d+) опционально.
[MKG] - персональный класс, позволяющий M, K, или G. B - буква B.

Демо: https://regex101.com/r/3TifGy/1

PHP Использование:

<?php 
preg_match('/(\d+(?:\.\d+)?)[MKG]B/', '">blablabla</a> </td>blablabla "> 8.8GB </a> </td>', $match); 
echo $match[1]; 

PHP Демо: https://eval.in/656562

Смежные вопросы