我有點兒是正則表達式的新手,所以會對這一點的同行反饋表示讚賞。它會在我的網站上大量使用,所以任何奇怪的邊緣情況都可能造成嚴重破壞。這個想法是在整個單位或分數中輸入一定量的配料。由於我的自動完成機制,只有一個數字也是有效的(因爲它會彈出一個下拉菜單)。這些線是有效的:任何方式來改善這個正則表達式?
1
1/2
1 1/2
4 cups
4 1/2 cups
10 3/4 cups sliced
該行的數字部分應該是其自己的組,所以我可以解析與我的分數解析器。數字部分之後的所有內容都應該是第二組。起初,我嘗試這樣做:
^\s*(\d+|\d+\/\d+|\d+\s*\d+\/\d+)\s*(.*)$
這幾乎工作,但 「1個1/2杯具」 將得到解析:(1)(1/2杯),而不是(1 1/2)和(杯)。我撓了一下腦後,我確定這是因爲我的「OR」子句的順序。 (1)滿足\ d +並且(。*)滿足其餘。所以我改變了這個:
^\s*(\d+\/\d+|\d+\s*\d+\/\d+|\d+)\s*([a-z].*)$
這幾乎可以工作,但允許奇怪,如「1 1/2/4杯」或「1/2 3杯」。所以,我決定一個有效的數值表達式後執行一個字母作爲第一個字符:
^\s*(\d+\/\d+|\d+\s*\d+\/\d+|\d+)\s*($|[a-z].*)$
注意,我在不區分大小寫的模式下運行這一點。這裏是我的問題:
表達式可以改進嗎?我有點不喜歡數字,分數,複合分數的「OR」列表,但我想不出一種允許整數,分數或複合分數的方法。
如果我可以在數字組件之後爲每個單詞返回一個組,那將會非常好。如(10 3/4)組,(杯子組)和(切片組)組。之後可以有任何數量的單詞。這可能嗎?
謝謝!
哦,糟糕,錯過了一個例子..金額可以用十進制表示。所以我又添加了一個OR子句:012 \ \ \ \ \ \ \ \ \ \ ($ | [az]。*)$ – 2010-08-23 01:13:08