2016-10-06 5 views
-3

Ich bin neu zu regulären Ausdruck.Regulärer Ausdruck Extrakt kurze Übereinstimmung

Der Inhalt ist

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

ich den Wert 8.8, erhalten möchten, aber wenn ich (?<=">)(.*?)(?=GB<\/a>) verwenden, wird es die Texte vor 8.8 als auch, also erhalten. ">blablabla</a> </td>blablabla "> 8.8GB

Ich weiß nicht, wie das zu lösen ist. Jede Hilfe wird sehr geschätzt.

+2

Wenn Ihr String html ist, verwenden Sie [ 'DOMDocument'] (http://php.net/manual /de/domdocument.loadhtml.php) anstelle von regex – Mohammad

+0

[Die Kraft von Regex und HTML zusammen im selben konzeptionellen Raum wird Ihren Verstand wie so viel wässriger Kitt zerstören.] (http://stackoverflow.com/a/1732454/ 2370483) – Machavity

+2

danke chris85, es funktioniert perfekt ly! – Wendy

Antwort

1

könnten Sie verwenden:

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

den Integer-Wert vor der Speichereinheit zu extrahieren.

Die \d ist eine beliebige Nummer.
+ ist ein Quantifizierer, der eine oder mehrere Zahlen zulässt.
?: ist eine nicht erfassende Gruppe.
\. ist ein Literal ..
? macht den Dezimalteil (\.\d+) optional.
[MKG] ist eine Zeichenklasse, die M, K oder G zulässt. B ist ein Literal B.

Demo: https://regex101.com/r/3TifGy/1

PHP Verbrauch:

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

PHP Demo: https://eval.in/656562

Verwandte Themen