PHP: экранировать не буквенно-цифровые символы - PullRequest
2 голосов
/ 06 июня 2011

Я пытаюсь перенести скрипт, который я написал в 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 ]

3 голосов
/ 06 июня 2011

Используйте [^[:alnum:]] для представления всех не алфавитно-цифровых символов в вашей локали, и не забывайте удваивать / удваивать обратную косую черту:

$ cat test.php
#!/usr/bin/env php

<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>

$ ./test.php 
aaa\ bbb\:\:
3 голосов
/ 06 июня 2011
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
2 голосов
/ 06 июня 2011

Попробуйте:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...