【问题标题】:Split String at Last Space before Delimiter Using preg_split?使用preg_split在分隔符之前的最后一个空格处拆分字符串?
【发布时间】:2019-06-11 13:56:59
【问题描述】:

我正在尝试使用 preg_split 在斜杠前的每个空格处拆分以下字符串。我知道这将是一个简单的 REGEX,但我似乎无法使用 RegExr 解决?

$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';

我需要在每个 / 之前的最后一个空格处拆分字符串以给出以下结果:

DZ9243/XSHAGT FFGD JERSE XS2 
DZ9232/MHAGT SUUMTE KNI M10
DZ9232/LHAGT SUMMER KNI L6

任何帮助将不胜感激!

【问题讨论】:

标签: php regex preg-split


【解决方案1】:

您可以使用前瞻断言:

$string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
$pieces = preg_split('@ (?=[^ ]*/)@', $string);

print_r($pieces);

输出是:

Array
(
    [0] => DZ9243/XSHAGT FFGD JERSE XS2
    [1] => DZ9232/MHAGT SUUMTE KNI M10
    [2] => DZ9232/LHAGT SUMMER KNI L6
)

正则表达式

@ (?=[^ ]*/)@
  • @regex delimiter;通常/ 用作分隔符,但此正则表达式尝试匹配/,这就是为什么最好使用不同的分隔符;
  • 后跟一个空格字符;它是您要用作分隔输入字符串的分隔符;
  • (开群;断言需要该组;
  • ?= 是前瞻性的积极断言;它要求组匹配输入字符串,但不消耗输入字符串中与组匹配的字符;
  • [^ ]*/是群组内容;它匹配任何非空格字符任意多次,后跟/;这是包含斜线的单词 (/);
  • ) 结束群组。

总而言之,regex 匹配后跟一个包含斜杠但该单词不被消耗的单词的空格;它不包含在preg_split() 的分隔符中,仅使用了空格字符。

【讨论】:

    【解决方案2】:

    如果它没有 是正则表达式……

    $string = 'DZ9243/XSHAGT FFGD JERSE XS2 DZ9232/MHAGT SUUMTE KNI M10 DZ9232/LHAGT SUMMER KNI L6';
    
    $parts = explode(' ', $string);
    $results = [];
    $i = -1;
    
    foreach($parts as $part) {
      strpos($part, '/') !== false ? $results[++$i] = $part : $results[$i] .= ' ' . $part;
    }
    
    var_dump($results);
    

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多