Próbuję utworzyć wspólne maski z ciągiem tak:Jak mogę zamienić wiele ciągów w łańcuchu bez nakładania się wyników?
012abc.d+e_fg~hijk => 012{start}.d+{middle}_fg~{end}jk
wymienić:
$arrFromTo = array(
'st' => '{pre}',
'abc' => '{start}',
'e' => '{middle}',
'hi' => '{end}',
'dd' => '{post}'
);
Zamiast Trzymam nakładających zamienniki i dostać coś takiego zamiast (za pomocą pętli str_replace
' e)
012{{pre}art}.d+{mi{post}le}_fg~{end}jk
Ponieważ st
znajduje się już zastąpiony {start}
i dd
znajduje się w {middle}
.
Jak zastąpiłbyś poniższe?
$str = 'abc.d+e_fg~hijk';
echo replace_vars($str); // Desired output: 012{start}.d+{middle}_fg~{end}kJ
Zastanawiałem się nad uporządkowaniem tablicy, więc '' dd '=>' {post} ''znajdowało się w innej pozycji, ale wywoływało to inne problemy. –
Nieczęsto proponuję regex, ale w tym przypadku może to być rozsądne, więc wykonuj uprzedzenia/tyły, aby sprawdzić, czego się spodziewasz, zanim zastąpisz –
@scrowler Niestety w mojej bibliotece PCRE występuje błąd o ujemnej jakości wstecznej o zmiennej długości. Nie mogę uaktualnić biblioteki PCRE, więc w tym momencie przestałem iść tą ścieżką. – Ryan