【问题标题】:Splitting a single string to an array on more than one delimiter将单个字符串拆分为多个分隔符上的数组
【发布时间】:2019-02-11 06:33:54
【问题描述】:

是否有可能爆炸以下内容:

08 1.2/3(1(1)2.1-1

到{08, 1, 2, 3, 1, 1, 2, 1, 1}的数组?

我尝试使用preg_split("/ (\s|\.|\-|\(|\)) /g", '08 1.2/3(1(1)2.1-1'),但它什么也没返回。我尝试检查我的正则表达式here,它匹配得很好。我在这里错过了什么?

【问题讨论】:

  • 您的正则表达式两侧都有不应该存在的空格。试试/(\s|\.|\-|\(|\)|\/)/
  • @Nick 默认标志是g吗?
  • 是的,preg_split 不需要 g
  • @Nick 天哪,它确实通过擦除空间起作用。这是正确的语法吗?即使是空格也会导致错误?
  • 如果你在正则表达式中放了一个空格(或任何字符),那么它必须匹配一些东西。

标签: php explode preg-split


【解决方案1】:

您应该使用一个字符类,其中包含您要用于分割的所有分隔符。正则表达式字符类出现在[...]:

<?php
$keywords = preg_split("/[\s,\/().-]+/", '08 1.2/3(1(1)2.1-1');
print_r($keywords);

结果:

Array ( [0] => 08 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => 1 [6] => 2 [7] => 1 [8] => 1 )

【讨论】:

  • 为什么我的没有工作?在我的示例中我做错了什么?
  • @RichardW 你的正则表达式两边都有不应该存在的空格。
  • @RichardW 您需要一个正则表达式字符类,请参阅我的评论。
  • @TimBiegeleisen 我明白了,所以一个字符类基本上包含了我想成为我的正则表达式选择的所有内容,这样我就不必重复使用|?
  • @RichardW 是的。我同意你的评论。
【解决方案2】:

你可以使用 preg_match_all():

$str = '08 1.2/3(1(1)2.1-1';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

【讨论】:

  • 啊抱歉,我的意思不是只有数字,我只想根据这些分隔符进行分隔。其他的东西可以作为数组的元素通过。
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多