PHP: экранировать не буквенно-цифровые символы
Я пытаюсь перенести скрипт, который я написал в bash некоторое время назад, в PHP. Одна конкретная строка о экранировании всех не алфавитно-цифровых символов.
В Bash я смог сделать это в одну строку следующим образом:
echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:
Самое близкое, что я получил в PHP, было с этим:
echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\
Однако я изо всех сил пытаюсь повторно использовать мою группу регулярных выражений внутри preg_replace
(Я пробовал \1 и $1).
Может ли кто-нибудь помочь мне разобраться в этом однострочном PHP, пожалуйста?
3 ответа
Решение
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
Использование [^[:alnum:]]
чтобы представить все не алфавитно-цифровые символы в вашей локали и не забудьте дважды удвоить экранирование обратной косой черты:
$ cat test.php
#!/usr/bin/env php
<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>
$ ./test.php
aaa\ bbb\:\:
Пытаться:
echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');