【问题标题】:PHP preg_split()PHP preg_split()
【发布时间】:2023-03-13 04:56:01
【问题描述】:

我正在尝试使用 preg_split,如下所示:

$tarea = "13.3R4.2";
$keywords = preg_split("/[0-9]*.[0-9][a-zA-Z]/", $tarea);
print_r ($keywords);

我无法捕获数组 [0] 的值。下面是输出:

Array ( [0] => [1] => 4.2 ) 

我想捕获数组的两个索引。我不确定我在这里犯了什么错误。请帮忙!!

我期望的输出是:

Array ( [0] => 13.3R[1] => 4.2 ) 

谢谢

【问题讨论】:

  • 预期输出是什么?
  • 您必须转义.,否则它在此上下文中表示任何单个字符
  • 预期输出:数组([0] => 13.3R[1] => 4.2)
  • 使用preg_match更容易。
  • 或者只是在 R 上爆炸

标签: php preg-split


【解决方案1】:

我认为你误解了preg_split() 的目的。它将字符串 on 拆分为指定的分隔符,这意味着它并非旨在返回分隔符。您想使用 preg_match() 返回匹配的子字符串:

$tarea = "13.3R4.2";
preg_match_all("/[0-9]+\.[0-9][a-z]?/i", $tarea, $matches);
print_r($matches);

【讨论】:

  • 请注意,如果您使用PREG_SPLIT_DELIM_CAPTURE 选项,preg_split 可以返回分隔符。
  • 不知道;我还是觉得preg_match_all()这个函数用起来比较明显。
  • 我也是这么想的,但是这种情况下你需要描述字母右边的内容并使用捕获组。 (类似于迈克尔模式,但带有preg_match
【解决方案2】:

下面的代码解决了这个问题:

$tarea = "13.3R4.2";
$keywords = preg_split('/(\d*\.\d\w?)/',$tarea, -1, PREG_SPLIT_DELIM_CAPTURE |     PREG_SPLIT_NO_EMPTY);
print_r ($keywords);

输出:

Array ( [0] => 13.3R [1] => 4.2 ) 

感谢大家的大力帮助!!!

【讨论】:

  • 如果我是你,我会考虑 cmets 和其他答案以找到最合适的方式。
  • 如果你绝对想使用preg_split,你可以这样做:preg_split('~(?<=[a-zA-Z])~', $tarea);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多