Php 正则表达式仅匹配字符串的第一个匹配项

Php 正则表达式仅匹配字符串的第一个匹配项,php,regex,Php,Regex,我让troble将字符串分解为数组或匹配模式。 下面是字符串: Purchased: 12/7/11 58 - $2.5 Gold Coin @ $341.00 290 - Silver Dollar @ $36.02 Total - $500000.00 我想解析这个字符串并返回一个多维数组,如下所示: Array ( [0] => Array ( [0] => 58 - $2.5 Gold Coin @ $341.00 [1] =

我让troble将字符串分解为数组或匹配模式。 下面是字符串:

Purchased:
12/7/11

58 - $2.5 Gold Coin @ $341.00
290 - Silver Dollar @ $36.02

Total - $500000.00
我想解析这个字符串并返回一个多维数组,如下所示:

Array
(
  [0] => Array
    (
        [0] => 58 - $2.5 Gold Coin @ $341.00
        [1] => 290 - Silver Coin @ $36.02  
    )

[1] => Array
    (
        [0] => 58
        [1] => 290
    )

[2] => Array
    (
        [0] => $2.5 Gold Coin
        [1] => Silver Coin
    )

[3] => Array
    (
        [0] => 341.00
        [1] => 36.02
    )

[4] => Array
    (
        [0] => .00
        [1] => .02
    )
)
到目前为止,我有:

\s*?\n(\d*\.?\d*)\s-\s(.*?)\s\$(\d+(\.\d+)?\.?[0-9]*)
但是,当产品名称中有一个美元符号(即:“$2.5金币”)时,捕获组不起作用

我想知道是否有办法只从以“@$”开头的字符串中获取金额

我一直在尝试解决这个问题,这是一个很好的工具,但还没有什么乐趣。

你可以使用它

^(\d*\.?\d+)\s*-\s*(?:VF\s+)?(.*)\s@\s\$(\d+(\.\d+)?)

详细信息

  • ^
    -字符串的开头
  • (\d*\?\d+)
    -第1组:0+位,可选的
    和1+位
  • \s*-\s*
    -
    -
    用0+空格括起来
  • (?:VF\s+)
    -可选的非捕获组:
    VF
    和1+空格
  • (.*)
    -第2组:尽可能多的0+字符(换行字符除外)
  • \s@\s
    -包含1个空格的
    @
  • \$
    -a
    $
    字符
  • (\d+(\.\d+))
    -第3组:1个或多个数字,后跟与点匹配的可选第4组,然后是1个以上的数字

36.02美元是从哪里来的?为什么
341
缺少一个
$
你能写下你的输入和预期输出以匹配并具有某种逻辑一致性吗?第一印象很重要,仅供参考。对于一个不可理解的示例,您有18个视图。大多数人不会回来检查编辑,你可以期望你的文章平均不超过30-50次。我并不是想表现得刻薄,那只是现实。另外,请检查
^(\d*\?\d+)\s*-\s*(?:VF\s+)(.*)\s@\s\$(\d+)(\。\d+)
,请参阅