2016-06-10 50 views
-2

我有以下代碼正則表達式只有符合數字腓

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

我輸入的是:

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

我正則表達式匹配所有輸入的,但我想只擁有170林不是很熟。

+0

貴輸入已多次換行? – RomanPerekhrest

+0

nope沒有空行 – mk2015

+0

它看起來像'170 111.111.111.111.in-addr.dns.names.com'嗎? – RomanPerekhrest

回答

2

如果你只是想在你的字符串的任意位置的第一個數字,你可以使用這個表達式:
/(?:^|\s+)(\d+)(?:\s+|\n+|$)/

在你的列表中,它只會匹配170,你問。

如果你的字符串可能包含你要選擇幾個號碼,指定這樣的g(全球)修改器:/(?:^|\s+)(\d+)(?:\s+|\n+|$)/g

Example on regex101

我加入的情況下2個測試串在您的字符串具有不換行或不以數字開頭。

+1

好的做法是在應用程序之外總是根據您的輸入測試正則表達式。這樣,您知道正則表達式在使用之前可以正常工作,作爲您的一部分代碼。由@Niitaku提供的網站(regex101)是一個很好的資源。 – softius

0

您正在打印$ single,這是您的文本,因此您可以在屏幕上看到此文本。如果你想看到的只有170,你必須打印什麼匹配:

$single = "170 

111.111.111.111.in-addr. 

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

和輸出是:170 - 如你想

+0

爲什麼有人會拒絕我?這是一個很好的回答 – nospor