我有一個字符串,如:正則表達式來查找字符串整數和小數
$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;
我想從字符串是否是小數或沒有(12或1.5)獲得的金額,然後抓住前一次測量(盎司)。
我能夠使用一個非常基本的正則表達式來獲取測量結果,但獲取小數點/整數給我帶來了問題。
感謝您的幫助!
我有一個字符串,如:正則表達式來查找字符串整數和小數
$str1 = "12 ounces";
$str2 = "1.5 ounces chopped;
我想從字符串是否是小數或沒有(12或1.5)獲得的金額,然後抓住前一次測量(盎司)。
我能夠使用一個非常基本的正則表達式來獲取測量結果,但獲取小數點/整數給我帶來了問題。
感謝您的幫助!
如果你只是想獲取數據,你可以只使用一個鬆散的正則表達式:
([\d.]+)\s+(\S+)
([\d.]+)
:[\d.]+
將匹配的嚴格的數字和.
(這意味着4.5.6
或....
將序列匹配,但這些情況並不常見,這僅用於抓取數據),括號表示我們將捕獲匹配的文本。 .
這裏是字符類[]
,所以不需要轉義。
後跟非空格字符的任意空間\s+
和最大序列(由於貪婪量詞)\S+
(非空間真的是無空間:它會以Unicode幾乎所有的匹配,除了空格,製表符,新行,回車符)。
您可以得到第一個捕獲組中的編號和第二個捕獲組中的單元。
您可以在數更嚴格一點:
(\d+(?:\.\d*)?|\.\d+)\s+(\S+)
(\d+(?:\.\d*)?|\.\d+)
,所以我只說明這一部分。這有點嚴格,但是根據輸入域和您的要求,是否更嚴格。它將匹配整數34
,數字帶有小數部分3.40000
,並允許.5
和34.
個案通過。它會拒絕超過.
的號碼,或僅包含.
。 |
作爲OR分開2種不同模式:\.\d+
和\d+(?:\.\d*)?
。\d+(?:\.\d*)?
:這將匹配和(隱含地)斷言在整數部分的至少一個位,隨後可選.
(其需要與\
因爲.
指任何字符被轉義)和小數部分(其可以是0或更多數字)。最終選擇性由?
表示。 ()
可用於分組和捕獲 - 但如果不需要捕獲,則可使用(?:)
禁用捕獲(節省內存)。\.\d+
:這將匹配案例,如.78
。它匹配.
後跟至少一個(由+
表示)數字。這不是一個好的解決方案,如果你想確保你從輸入字符串中獲得有意義的東西。在編寫只捕獲有效數據的正則表達式之前,您需要定義所有的預期單位。
使用正則表達式\b\d+([\.,]\d+)?
爲了得到整數和小數,要麼使用逗號或點加一個字,請使用以下的正則表達式:
/\d+([\.,]\d+)?\s\S+/
你會允許哪種小數的?是'1.'還是'.5'好嗎?你需要允許數千個分離器('1,000 ml')嗎?其他小數點標點符號(歐洲:1,0升)? – 2012-07-16 08:22:50