2010-09-02 204 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);