Php 购物输入行的正则表达式

Php 购物输入行的正则表达式,php,regex,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”之前的内容。我应该在那里放什么 /^(\d+)\s(.+?)\sat\s(\d+\.?\d*)$/ 应该有用 应该有用。这应该对你有用 /(\d+)\s+(.+?)\s+a

我有这样的输入行:

1 soccer ball at 10
2 Iphones 4s at 199.99
4 box of candy at 50
我想得到第一个数字,物品本身和价格(我不想要“at”)

我已经完成了以下正则表达式:

/^(\d+)\sat\s(\d+\.?\d*)$/
但正如你所看到的,我错过了“at”之前的内容。我应该在那里放什么

/^(\d+)\s(.+?)\sat\s(\d+\.?\d*)$/
应该有用


应该有用。

这应该对你有用


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

这应该适合您

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

这里有
(\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修饰语:全局。所有比赛(第一场比赛不返回)

这里有
(\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修饰语:全局。所有匹配项(第一次匹配时不返回)

以下是我的版本:

// 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万美元的产品可能会失败。:)

以下是我的版本:

// 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万美元的产品可能会失败。:)

我喜欢这只野兽,因为它支持多个空格和?在“数量”和“价格”之间。此外,它还可以支持千个格式的数字,其中包含一个,甚至。。如果不是很严格:)也添加了我的严格(er)版本…好的,它匹配多个空格(只添加a+),但这会匹配:
1足球在.3.23.42.3.,,,,
omg^^^^^^这里有一个更好的:
/(\d+)\s+(.+)\s+at\s+(\d{1,3}(?,\d{3})*(?:\.\d+)//code>我喜欢这个,因为它支持多个空格和?在“数量”和“价格”之间。此外,它还可以支持千个格式的数字,其中包含一个,甚至。。如果不是很严格:)也添加了我的严格(er)版本…好吧,它匹配多个空格(只添加a+),但这会匹配:
1个足球位于.3.23.42.3.,,,,
omg^^^^^^这里有一个更好的:
/(\d+)\s+(.+)\s+at\s+(\d{1,3}(?,\d{3})*(?:\.\d+)//code>这个格式来自哪里?解析并非不可能,但您考虑过XML/JSON吗?这种格式来自哪里?解析并非不可能,但您考虑过XML/JSON吗?