1

私がやりたいのは、文字列を取り、それを小さなセクションに分割することです。入力文字列の構造は固定されています。

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

私がやりたいことは、ブラケットまたは「;」を見つけるたびに部分文字列を作成することです。つまり、

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

今まで書いてきた PHP コードがいつもうまくいくとは限らず、{something here}loremipsum2 つのセクションに分けるべきところを 1 つのセクションとして書いてしまうことがあります。

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 に答える