2016-06-10 19 views
-2

Ich habe den folgenden CodeRegex Nur passen Zahlen Php

if (preg_match('/[^1-9]/', $single)){ 
    print_r($single."\n"); 
} 

Meine Eingabe ist:

170 
111.111.111.111.in-addr. 
dns.names.com 

Mein Regex alle Eingangs passt, aber ich möchte nur haben die 170. Im nicht bekannt.

+0

hat Ihre Eingabe hat Feeds mehrzeilige? – RomanPerekhrest

+0

nein gibt es keine leeren Zeilen – mk2015

+0

sieht es aus wie '170 111.111.111.111.in-addr.dns.names.com'? – RomanPerekhrest

Antwort

2

Wenn Sie nur die erste Nummer positioniert überall in Ihrem String möchten, können Sie diesen Ausdruck verwenden:
/(?:^|\s+)(\d+)(?:\s+|\n+|$)/

In Ihrer Liste, wird es nur 170 übereinstimmen, wie Sie gefragt.

Wenn Ihr String mehrere Nummern enthalten können Sie auswählen möchten, geben Sie die g (global) Modifikator wie folgt aus: /(?:^|\s+)(\d+)(?:\s+|\n+|$)/g

Example on regex101

I bei 2 Test Saiten hinzugefügt, wo die Zeichenfolge hat kein Zeilenvorschub oder startet nicht mit einer Nummer.

+1

Es ist eine gute Übung, den regulären Ausdruck immer außerhalb Ihrer Anwendung auf Ihre Eingaben zu testen, damit Sie wissen, dass der reguläre Ausdruck funktioniert, bevor Sie ihn als Teil Ihrer Anwendung verwenden Die von @Niitaku zur Verfügung gestellte Website (regex101) stellt eine großartige Ressource dafür dar. – softius

0

Sie drucken $ single, was Ihr Text ist, deshalb sehen Sie diesen Text auf dem Bildschirm. Wenn Sie nur 170 sehen wollen, müssen Sie drucken, was abgestimmt wurde:

$single = "170 

111.111.111.111.in-addr. 

dns.names.com"; 
if (preg_match('/^(\d+)\s/', $single, $matches)){ 
    print_r($matches[1]."\n"); 
} 

Und Ausgabe lautet: 170 - wie man wollte

+0

Warum jemand mich benachteiligt Dies ist eine gute Antwort auf die Frage – nospor