1

我想要做的是取一个字符串并将其分成更小的部分。输入字符串具有固定的结构:

{something here}loremipsum;loremipsum2;{something else here} ...

我想做的是每次找到括号或“;”时创建一个子字符串,即:

{ something here }
lorem ipsum
lorem ipsum 2
{ something else here }

到目前为止,我编写的 PHP 代码并不总是能很好地工作,这意味着有时我会得到类似于{something here}loremipsum单个部分的东西,而当它应该分成两个部分时。

public function divide() {
    $item = "";
    $splitted_instructions = str_split($this->instructions);
    for($i=0; $i<count($splitted_instructions); $i++) {
        if ($splitted_instructions[$i] == "{") {
            while ($splitted_instructions[$i+1] != "}") {
                $i++;
                $item .= $splitted_instructions[$i];
            }
            $item = "{" . $item . "}";
            $items[] = $item;
            $item = "";
        } else {
            while ($splitted_instructions[$i+1] != ";" && $i<count($splitted_instructions)) {
                $i++;
                $item .= $splitted_instructions[$i];
            }
            $items[] = $item;
            $item = "";
        }
    }
    print_r($items);
}

当然,如果有更好的方法,请告诉我:)

4

2 回答 2

4
$parts = preg_split("/((?<=\\})|\\;|(?=\\{))/", $source, -1, PREG_SPLIT_NO_EMPTY);

它通过正则表达式定义的分隔符拆分$source:即,通过以下之一:

  1. }以字符开头的光标位置
  2. ;特点
  3. 后跟一个{字符的光标位置

Working DEMO

于 2012-07-02T10:48:33.883 回答
1

正则表达式的简单应用:

$string = preg_replace('/({.*?})(.*?);(.*?);({.*?})/', "\\1\n\\2\n\\3\n\\4\n", $string);
于 2012-07-02T10:48:16.237 回答