爆炸或拆分utf-8字符串但保持分隔符附加到字符串

时间:2012-02-28 23:21:00

标签: php regex

我想将字符串转换为由逗号或句点分隔的元素数组,但每个元素都保留其分隔符。例如,美国独立宣言序言的第一句话将成为:

  • 在人类活动过程中,
  • 一个人有必要解散将他们与另一个人联系起来的政治乐队,
  • 并假设在地球的力量之中,
  • 自然法和自然法的上帝赋予他们的独立和平等的站点,
  • 对人类意见的尊重要求他们应该宣布促使他们分离的原因。

这样做的有效方法是什么?我知道如何使用带有preg_split标记的PREG_SPLIT_DELIM_CAPTURE将片段和分隔符保存到数组中,但我不确定是否有方法可以保留逗号和句点一次操作中的句子碎片。

我想用更准确的方式来描述我想要的是preg_split,其中分隔符将是前面有逗号,句号等的任何内容。我不确定正则表达式是否允许......

我需要这对utf8友好。

2 个答案:

答案 0 :(得分:1)

这会有用吗?

if (preg_match_all("/([^.,!?]*[.,!?])/", $str, $matches)) {
    var_dump($matches[1]);
}

答案 1 :(得分:0)

如果我理解正确,您正在寻找以下内容:

$str = 'asdf, qwer, zxcv, uiop';
$arr = preg_split('/(,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$tmp = array();
for ($i = 0; $i < sizeof($arr); $i += 2) {
    $delim = isset($arr[$i + 1]) ? $arr[$i + 1] : '';
    $tmp[] = $arr[$i] . $delim;
}
print_r($tmp);

打印哪些:

Array
(
    [0] => asdf,
    [1] =>  qwer,
    [2] =>  zxcv,
    [3] =>  uiop
)