2016-06-10 44 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