购物输入线的正则表达式

时间:2012-10-27 12:31:42

标签: php regex

我有这样的输入行:

1 soccer ball at 10
2 Iphones 4s at 199.99
4 box of candy at 50

我想得到第一个数字,项目本身和价格(我不想要" at")。

我做了以下正则表达式:

/^(\d+)\sat\s(\d+\.?\d*)$/

但是你可以看到我错过了" at"之前的内容。我该怎么办?

4 个答案:

答案 0 :(得分:3)

这应该适合你。

/(\d+)\s+(.+?)\s+at\s+([\d\.,]+)/

答案 1 :(得分:1)

这是我的版本:

// double escaped \ as it's supposed to be in PHP
'~(\\d+)\\s+(.+?)\\s+at\\s+(\\d+(?:,\\d+)?(?:\\.\\d+)?)~'
// catches thousands too but stays strict about the order of , and .

干杯!

PS:代码超过100万美元的产品可能会失败:)

答案 2 :(得分:0)

/^(\d+)\s(.+?)\sat\s(\d+\.?\d*)$/

应该有用。

答案 3 :(得分:0)

Regex demo

这里有(\d+)\s([\w ]+)\sat\s(\d+(?:\.\d+)?)

正如您在演示中所见,解释

/(\d+)\s([\w ]+)\sat\s(\d+(?:\.\d+)?)/g
1st Capturing group (\d+) 
    \d infinite to 1 times. Digit [0-9] 
\s Whitespace [\t \r\n\f] 
2nd Capturing group ([\w ]+) 
    Char class [\w ] infinite to 1 times. matches one of the following chars: \w 
        \w Word character [a-zA-Z_\d] 
\s Whitespace [\t \r\n\f] 
at Literal `at`
\s Whitespace [\t \r\n\f] 
3rd Capturing group (\d+(?:\.\d+)?) 
    \d infinite to 1 times. Digit [0-9] 
    Group (?:\.\d+) 1 to 0 times. 
        \. Literal `.`
        \d infinite to 1 times. Digit [0-9] 

g修饰符:全局。所有比赛(首场比赛时不返回)