1

我是编程新手,我正在尝试构建一个供个人使用的小 php 价格比较脚本。我已经设法解析了一个网上商店的网站(使用简单的 dom 解析器),并获得了一个(某种)清理过的字符串,其中包含一个层级和一个价格。

我正在使用的字符串现在的格式如下:

" 50  27,00 "  //50 pieces of a product cost €27,00 (without the ""s)
"1000  26,60 " //1000 pieces of a product cost €26,60

我想将字符串的第一部分抓取到 $tier,并将第二部分(包括逗号)抓取到字符串 $price。

你能帮我怎么做吗?有时,字符串开头的空格会有所不同(参见上面的示例。中间总是有 2 个空格。

如果我能像这样得到它(没有空格),数组也会很好:

$pricearray = array(50, "27,00"); //string to number will be my next problem to solve, first things first 

我想我必须使用 preg_split,但现在不要使用表达式。

谢谢你和我一起思考。

4

2 回答 2

4

最简单的方法是调用explode函数:

$string = '1000 26,60';
$pricearray = explode(' ', $string);

但首先,你必须去掉所有不必要的空格:

$string = trim($string); // remove spaces at the beginning and at the end
$string = preg_replace('/\s+/', ' ', $string); // replace 1+ spaces with 1 space

空间置换法取自这个问题。谢谢,瘾君子!

于 2012-12-24T20:56:54.320 回答
1

好吧,正则表达式引擎很难理解,但它们可以轻松地处理这些可选空间。

看看我在正则表达式模式中是否犯了错误:

$yourarray = array();
//just extract the pattern you want
preg_match( '/([0-9]+) + ([0-9]+,[0-9]+)/', " 50  27,00 ", $yourarray );
var_dump( $yourarray );
preg_match( '/([0-9]+) + ([0-9]+,[0-9]+)/', "1000  26,60 ", $yourarray );
var_dump( $yourarray );

// validate and extract the pattern you want
if ( !preg_match_all( '/^ *([0-9]+) +([0-9]+,[0-9]+) *$/', " 50  27,00 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
if ( !preg_match_all( '/^ *([0-9]+) + ([0-9]+,[0-9]+) *$/', "1000  26,60 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
if ( !preg_match_all( '/^ *([0-9]+) + ([0-9]+,[0-9]+) *$/', "1000 26 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
于 2012-12-24T21:16:49.237 回答