PHPで配列ではなく以下のサンプル文字列を置換または拡張したい
"data" in "[data]"
"data[key]" in "[data][key]"
"data[key1][key2]" in "[data][key1][key2]"
"data[key1][key2][]" in "[data][key1][key2]"
"data[]" in "[data]"
等々。preg_replace で何かを試しましたが、正しいパターンが見つかりませんでした
PHPで配列ではなく以下のサンプル文字列を置換または拡張したい
"data" in "[data]"
"data[key]" in "[data][key]"
"data[key1][key2]" in "[data][key1][key2]"
"data[key1][key2][]" in "[data][key1][key2]"
"data[]" in "[data]"
等々。preg_replace で何かを試しましたが、正しいパターンが見つかりませんでした
現在の質問では、基本的に、括弧で囲まれていないすべての単語を囲まれた単語に変換し、空の括弧を削除する必要があります。
PHP では、これは 1 つの関数で 2 つのステップで実行できます。
$string = 'data
data[key]
data[key1][key2]
data[key1][key2][]
data[]';
$string = preg_replace(
array('/(?<!\[)(\b\w+\b)(?!\])/', '/\[\]/'),
array('[$1]', ''),
$string);
echo $string;
説明:
(?<!\[)(\b\w+\b)(?!\])
^ ^ ^--- Negative lookahead, check if there is no ] after the word
^ ^--- \b\w+\b
^ ^ ^--- \w+ matches the occurence of [a-zA-Z0-9_] once or more
^ ^--- \b "word boundary" check http://www.regular-expressions.info/wordboundaries.html
^--- Negative lookbehind, check if there is no [ before the word
\[\] This basically just match []