2012-03-23 113 views
1

這裏很基本的東西,試圖拉數14.5使用正則表達式和PHP,但我似乎無法得到語法正確。此外,數量是動態的,不能永遠是一個小數,但這裏的目標是儘量摳字眼Weight:</li>之間的數字:PHP和preg_match正則表達式以字符串拉小數十進制

<ul> 
    <li>Manufacturer: something</li> 
    <li>Model: 1216D101</li> 
    <li>Condition: New</li> 
    <li>Dimensions: 12" x 16"</li> 
    <li>Sold by the Dozen</li> 
    <li>Weight: 14.5 Lbs.</li> 
    </ul> 

這是我迄今爲止,並試圖改變,但是不斷下跌的短:

if (preg_match("/\Weight:\(\d+)\.(\d*?)\<\/li>/", $desc, $WEIGHT) == true) 
    { echo $WEIGHT[0]; } 

回答

1

試試這個正則表達式:

/Weight: ((?:\d+)(?:\.\d*)?)/ 

匹配的數量將在$WEIGHT[1]可用。

如果你不希望捕捉號碼.123.:如果你只是

if (preg_match('/Weight: (\d+(\.\d+)?)/', $desc, $matches)) { 
    echo $matches[1]; 
} 
+0

這會匹配它不應該的東西(例如, '123.'),並且不符合它的要求(例如'123')。 – FtDRbwLXw6 2012-03-23 14:04:36

+0

有趣。這似乎有訣竅,但drrcknlsn可能會做些什麼。我不確定我是否會在沒有進一步測試的情況下遇到這個問題,但到目前爲止它仍然有效。 – ToddN 2012-03-23 14:08:17

+0

'123.'是一個有效的數字。這個正則表達式匹配'123'。 – 2012-03-23 14:08:51

3

試試這個想匹配一個數字整數或小數點

if (preg_match('/^(\d+(\.\d+)?)$/',$num)) echo "$num is integer or decimal"; 
0
preg_match('<li>Weight: (\d+)\.?(\d+)?.+</li>', // ... 

應招

+0

這要求數字有一個小數點和小數點。 OP說數字「不一定總是小數。」 – FtDRbwLXw6 2012-03-23 14:06:39

+0

哦,是的,我忘了添加'?',謝謝 – 2012-03-23 14:09:01

0

/Weight: ((?:\d+)(?:\.\d+)?)/