2010-09-02 297 views
0

我试图使用PHP preg_math解析字符串,看起来像:使用PHP的preg_match

6.15608128 Norwegian kroner 

我只是想在第一部分(数字),而不是文字。我写了一个简单的正则表达式像

[0-9\.]+ 

是工作在正则表达式测试正常,但PHP抱怨的“+”。任何人都可以帮我写这个正则表达式,所以它对preg_match函数有效吗?我尝试了很多不同的想法,但我对真正的正则表达式不太了解。

感谢您的任何提示。

+0

的完整代码,请。 – kennytm 2010-09-02 17:50:16

+1

“PHP抱怨+”是什么意思?它说什么? – BoltClock 2010-09-02 17:50:40

+0

当你在一个字符类中时,你不需要转义它。 – Aillyn 2010-09-02 17:56:54

回答

5

The regex works fine。您是否缺少delimiters?该函数应该这样来使用:

preg_match('/[0-9\.]+/', $string, $result); 

(。顺便说一句,你不需要逃避字符类中的.[0-9.]就够了)

+0

非常感谢Kenny,你是对的,我错过了分隔符。 – julio 2010-09-02 18:08:43

+0

正如您可能已经猜到的,我正在搞乱Google货币转换API。问题是,他们是非常不规范的用自己的数据,这是不正确的JSON等 一些汇率的有空格,而不是逗号或其他separators--如: 1 811.5942哥伦比亚比索 是否有改变这个正则表达式来包含这个空间的方法?再次,在一个正常的正则表达式中,您只需在点([0-9 \。])之后添加一个空格,但这在PHP中不起作用。 再次感谢。 – julio 2010-09-02 18:19:24

+0

@ julio:'[0-9。 ]'必须工作(但也包括哥伦比亚之前的空间)。如果没有,请尝试'[0-9。\ s]'。如果问题是由于额外的空间造成的,请尝试使用[\ d \ s] + \。\ d +'。 – kennytm 2010-09-02 18:24:18

3

不具有实际的代码,这里是一些代码确实有效:

$string = "6.15608128 Norwegian kroner"; 
preg_match('#[0-9\.]+#', $string, $matches); 

print_r($matches); 

/* Outputs: 

    Array 
    (
     [0] => 6.15608128 
    ) 
*/ 

#号是分隔符。有关php正则表达式的更多信息,请参阅this article

1

你是否用斜线包围了你的模式?

preg_match('/[0-9\.]+/', $string, $matches);

+1

它不*有*是斜线,只是必须是一个有效的分隔符,作为一个fyi :) – 2010-09-02 17:56:26

+0

Neato - 不知道。 – sholsapp 2010-09-02 17:57:30

1

试试这个:

$s = '6.15608128 Norwegian kroner'; 

preg_match('/[0-9]*\.[0-9]*/', $s, $matches); 
var_dump($matches);