1

私はこの文字列を持っています:

EXAMPLE|abcd|[!PAGE|title]

私はそれを次のように分割したい:

Array
(
    [0] => EXAMPLE
    [1] => abcd
    [2] => [!PAGE|title]
)

どうやってするの?ありがとうございました。

4

5 に答える 5

3

デモ

あなたが言った以上に何も必要ない場合は、CSV を解析するようなものですが、|区切り記号[として"使用(\[.*?\]+|[^\|]+)(?=\||$)すると、私が思うに作業を行います。

編集: 正規表現を変更し、[asdf]].[]asf] のような文字列を受け入れるようになりました

説明:

  1. (\[.*?\]+|[^\|]+)-> これは 2 つの部分に分かれています: (1.1 または 1.2 に一致します)
    1.1 ->と 1.2\[.*?\]+の間のすべてに一致します-> で囲まれたすべてに一致します[]
    [^\|]+|
  2. (?=\||$)-> これは正規表現に、その次が a または文字列の末尾でなければならないこと|を伝え、前の例のように文字列を受け入れるように正規表現に伝えます。
于 2013-01-02T11:02:20.497 に答える
2

この正規表現を使用します (?<=\||^)(((\[.*\|?.*\])|(.+?)))(?=\||$)

(?<=\||^) Positive LookBehind

    1st alternative: \|Literal `|`

    2nd alternative: ^Start of string

1st Capturing group (((\[.*\|?.*\])|(.+?))) 

    2nd Capturing group ((\[.*\|?.*\])|(.+?)) 

        1st alternative: (\[.*\|?.*\])

            3rd Capturing group (\[.*\|?.*\]) 

                \[ Literal `[`

                . infinite to 0 times Any character (except newline) 

                \| 1 to 0 times Literal `|`

                . infinite to 0 times Any character (except newline) 

                \] Literal `]`

        2nd alternative: (.+?)

            4th Capturing group (.+?) 

                . 1 to infinite times [lazy] Any character (except newline) 

(?=\||$) Positive LookAhead

    1st alternative: \|Literal `|`

    2nd alternative: $End of string

g modifier: global. All matches (don't return on first match)
于 2013-01-02T11:02:05.640 に答える
2

あなたの例を考えると、を使用できます(\[.*?\]|[^|]+)

preg_match_all("#(\[.*?\]|[^|]+)#", "EXAMPLE|abcd|[!PAGE|title]", $matches);

print_r($matches[0]);

// output:
Array
(
    [0] => EXAMPLE
    [1] => abcd
    [2] => [!PAGE|title]
)
于 2013-01-02T11:06:51.433 に答える
0

非正規表現ソリューション:

$str = str_replace('[', ']', "EXAMPLE|abcd|[!PAGE|title]");
$arr = str_getcsv ($str, '|', ']')

この「[[]]」のようなものを期待する場合は、スラッシュで括弧内をエスケープする必要があります。この場合、正規表現の方が適している可能性があります。

于 2013-01-02T11:52:01.500 に答える
-5

http://de2.php.net/manual/en/function.explode.php

$array= explode('|', $string);
于 2013-01-02T10:58:26.487 に答える