【问题标题】:Explode string after price价格后爆炸字符串
【发布时间】:2013-03-17 05:20:15
【问题描述】:

假设我有一个字符串

$what = "1 x Book @ $20 32 x rock music cd @ $400 1 x shipping to india @ $10.5";

我想爆炸,这样输出就是

Array 
(
    [0] => 1 x Book @ $20
    [1] => 32 x rock music cd @ $400
    [2] => 1 x shipping to india @ $10.50
)

我正在考虑类似下面的内容,但不知道要使用哪个正则表达式!

 $items = preg_split('/[$????]/', $what);

提前致谢

【问题讨论】:

  • preg_split 丢弃了分隔符,所以我会选择另一种解决方案,就像 Prasanth Bendra 提出的那样。

标签: php explode preg-split


【解决方案1】:

试试这个:

$str = '1 x Book @ $20 32 x rock music cd @ $400 1 x shipping to india @ $10.5';
preg_match_all('/(?P<match>\d+\s+x\s+[\w\s]+\s+@\s+\$[\d\.]+)/',$str,$match);

echo "<pre>";
print_r($match['match']);

输出:

Array
(
    [0] => 1 x Book @ $20
    [1] => 32 x rock music cd @ $400
    [2] => 1 x shipping to india @ $10.5
)

另一种解决方案

根据 Dream Eater 的评论:更小的写法:(.*?\$\d+)\s。 – Dream Eater 3 分钟前

我刚刚在最后添加了*,它工作正常。

$str = '1 x Book @ $20 32 x rock music cd @ $400 1 x shipping to india @ $10.5';
preg_match_all('/(.*?\$\d+)\s*/',$str,$match);

echo "<pre>";
print_r($match);

参考:http://php.net/manual/en/function.preg-match.php

【讨论】:

  • 小写方式:(.*?\$\d+)\s.
  • 这似乎适用于初始测试,但是现在如果美元符号后面的值有 .5 或 .6 等,那么该值将从输出数组中消失。例如,1 x Shipping @ $1.5 变为.. [KEY] => 1 x Shipping @ $1 .. 有什么想法吗?谢谢!
  • 第一个解决方案对我来说很好。当我输入$str = '1 x Book @ $20 32 x rock music cd @ $.5 1 x shipping to india @ $10.5'; 时,其中有$.5,我得到的输出为Array ( [0] =&gt; 1 x Book @ $20 [1] =&gt; 32 x rock music cd @ $.5 [2] =&gt; 1 x shipping to india @ $10.5 )
  • 是的,第一个解决方案有效,谢谢,仍然有问题,但是因为某些项目在描述中有一个“&”字符,例如 1 x Book & CD @ $10 当 & 字符存在时第一个解决方案不起作用。第二种解决方案适用于小数位,但不能使用。有任何想法吗??非常感谢您抽出宝贵时间。
  • 找到了解决方案——preg_match_all('/(.*\$[\d\.]+)\s*/',$str,$match); - 谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多