【问题标题】:Parsing digit which has three letters with preg_match使用 preg_match 解析具有三个字母的数字
【发布时间】:2017-02-01 08:02:45
【问题描述】:

我有一个字符串,我必须解析包含三个字母的数字,但我想使用 preg_match 使用相同的模式。

这是我的代码,谁能帮帮我。

$string=" AMOUNT - 10.00CAD  0.50XGA  1.00XQA";
if(preg_match('/^\s+AMOUNT\s+\-\s+\d+[.]\d+[A-Z]{3}\s+((?J)(?<amount>\d+[.]\d+)(XGA)?(?J)\s+(?<amount>\d+[.]\d+)(XQA))/',$string,$m))
{
    print_r($m);
}

【问题讨论】:

  • 那么,你的代码有什么问题?
  • 嘿 Wiki 它没有用 模式解析第二个数字
  • 1 个捕获组 => 结果数组中的 1 个项目。 (?J) 无济于事。然后再添加一组。
  • 你能告诉我怎么做吗
  • [amount] =&gt; 0.50 [amount] =&gt; 1.00 - PHP 数组不能有重复的键

标签: php regex preg-match preg-match-all


【解决方案1】:

我会这样使用preg_match_all

$string=" AMOUNT - 10.00CAD  0.50XGA  1.00XQA";
if(preg_match_all('/^\s+AMOUNT\s+-\s+(*SKIP)(*F)|(\d+\.\d+)[A-Z]{3}\b/', $string, $m)) {
    print_r($m);
}

输出:

Array
(
    [0] => Array
        (
            [0] => 10.00CAD
            [1] => 0.50XGA
            [2] => 1.00XQA
        )

    [amount] => Array
        (
            [0] => 10.00
            [1] => 0.50
            [2] => 1.00
        )

    [1] => Array
        (
            [0] => 10.00
            [1] => 0.50
            [2] => 1.00
        )

)

【讨论】:

  • ^\s+AMOUNT\s+-\s+(*SKIP)(*F)|这部分没用。
  • @CasimiretHippolyte:除非 OP 想要匹配以开头的字符串。
  • 即使在这种情况下,它也不会做任何事情。为了确保多个匹配项之前有一些内容,唯一的方法是使用基于 \G 的模式。
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多