PHP экранирующий разделитель - PullRequest
0 голосов
/ 16 марта 2012

Я использую PHP * '1001 * метод для замены определенных токенов / заполнителей в строке.Это работает очень хорошо, но теперь я пытаюсь разобраться, были ли заменены все мои токены.

Следующий пример:

$trans = array(":hello" => "hi", ":hi" => "hello");
echo strtr(":hi all, I said :hello", $trans);

выведет:

привет всем, я сказал привет

Оба токена были успешно заменены, но как мне это проверить?Я не могу найти в выходных данных вхождения моего разделителя ':', поскольку выходная строка может содержать в данных допустимые значения ':'.

Есть ли способ, которым я могу избежать этих разделителей перед выполнением замены,затем сделайте подсчет на неэкранированных разделителях, чтобы выяснить, остались ли какие-либо токены без замены, и затем, наконец, не экранируйте экранированные разделители перед возвратом?

ПРИМЕЧАНИЕ: Я не могу использовать str_replace, необходимо использовать этот метод.

1 Ответ

1 голос
/ 16 марта 2012

Я не думаю, что strtr может вам здесь помочь, он просто заменяет все, что находит.Кажется, вам нужно выяснить, есть ли разница между токенами в массиве и в строке.Для этого что-то вроде этого должно сделать:

preg_match_all('/:\w+/', $str, $matches);
if (array_diff($matches[0], array_keys($trans))) {
    // the string has tokens that aren't in $trans
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...