0 レビュー
1 回答
php-正規表現のヒントリクエスト
次のような文字列があります
"first,second[,b],third[a,b[1,2,3]],fourth[a[1,2]],sixth"
配列に分解したい
Array (
0 => "first",
1 => "second[,b]",
2 => "third[a,b[1,2,3]]",
3 => "fourth[a[1,2]]",
4 => "sixth"
}
角かっこを削除しようとしました:
preg_replace( "/ [((?> [^ []] +)|(?R))*] / xis"、
""、
{-コード-1}
);
しかし、次のステップで行き詰まりました
わからない
0
レビュー
答え :
解決策:
PHPの正規表現フレーバーは再帰パターンをサポートしているため、次のように機能します:
$text = "first,second[,b],third[a,b[1,2,3]],fourth[a[1,2]],sixth";
preg_match_all('/[^,\[\]]+(\[([^\[\]]|(?1))*])?/', $text, $matches);
print_r($matches[0]);
印刷されます:
配列 (( [0]=>最初 [ 1] =>秒[、b] [ 2] =>3番目の[a、b [ 1,2,3]] [3]=>第4[a [ 1,2]] [ 4]=>6番目 )
ここで重要なのはsplit
ではなく、 match
です。
このような不可解な正規表現をコードベースに追加するかどうかは、あなた次第です:)
編集
上記の提案では、 [
で始まるmatchエントリがないことに気づきました。これを行うには、次のようにします:
$ text = "first、second [、b]、third [ a、b [ 1,2,3]]、fourth {- code-4} a [ 1,2]]、6番目、[ s、[、e、[、v、]、e、] 、n] ";
preg _ match _all( "/
(#開始matchグループ1
[ ^、\ [ \]]#カンマまたは角括弧以外の文字
| # また
\ [#開き角かっこ
(#startmatchグループ2
[ ^ \ [ \]]#角括弧以外の文字
| # また
(?r)#再帰的にmatchパターン全体
)*#end match group 2、そしてそれを0回以上繰り返す
]#閉じ角かっこ
)+#end match group 1、そしてそれを1回以上繰り返す
/バツ"、
$ text、
$ match es
);
print_r($ match es [ 0]);
印刷するもの:
配列 (( [0]=>最初 [ 1] =>秒[、b] [ 2] =>3番目の[a、b [ 1,2,3]] [3]=>第4[a [ 1,2]] [ 4]=>6番目 [ 5] => [ s、[、e、[、v、]、e、]、n] )
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。