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::');
Другие вопросы по тегам