ソース文字列は次のようになっていると想定しました。
{I want|I need} to make this {stupid|awesome|irritating}
sentence formatting {rapidly|quickly} and {random|spin and be random}
そうしないと、ブラケットがネストされ、出力例がソース文字列に配置する方法と一致しません。次に、preg_match_all()
次のように使用します。
preg_match_all("/{.*}/U",$sourceString, $result,
PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE);
あなた$sourceString
が生成するもの:
array(1) {
[0]=>
array(4) {
[0]=>
array(2) {
[0]=>
string(15) "{I want|I need}"
[1]=>
int(0)
}
[1]=>
array(2) {
[0]=>
string(27) "{stupid|awesome|irritating}"
[1]=>
int(29)
}
[2]=>
array(2) {
[0]=>
string(17) "{rapidly|quickly}"
[1]=>
int(77)
}
[3]=>
array(2) {
[0]=>
string(27) "{random|spin and be random}"
[1]=>
int(99)
}
}
}
そして、すべてのアイテムを取得します。explode()
次に、 「|」の「{」と「}」を削除して、各エントリを処理できます。選択するオプションの配列を取得します。次に、必要なものを選択し、以前に見つかったアイテムをそれに置き換えます。str_replace()
多くの場所で同じエントリを使用できるようにしたいと想定しているため、最終的にはできないため、一致するパターンが見つかったオフセットをキャプチャすることに注意してくださいstr_replace()
(つまり、「{this|that} foo {this|that}」。私はそれが望ましくないと思いますが、両方を交換してください.したがって、文字列にオフセットがあり、文字列の長さは簡単に計算できますが、これはいくつかの手術を行うのに十分であり、エントリを切り取り、置換を配置します.他の, よりクリーンなアプローチは使用することです. preg_replace_callback()そしてそのすべての「ロジック」を置きます