2011-12-08 3 views
0

Я использую базу данных flatfile с символом разделителя, символ разделителя определяется пользователем и сохраняется в $this->_config->delimiter(). Я хочу запустить Regexp на входной строке, чтобы безопасно избежать символа разделителя и символа \, например.Regexp с переменной

// $this->_config->delimiter() = "|" 
$input = "the quick | brown \ fox jumped"; 
// function returning output here 
$output = "the quick \| brown \\ fox jumped"; 

Если вы знаете лучший/более быстрый способ сделать это без регулярного выражения, я также открыт для этого.

Возможно ли это сделать с переменной в регулярном выражении?

+0

Вы используете функцию в качестве переменной? Как вы можете сделать 'someFunction() = '|''? – SteeveDroz

+0

@Oltarus '$ _config' - это переменная, которая хранит экземпляр другого класса,' delimiter() '- это функция-геттер, которая возвращает разделитель из этого экземпляра. Надеюсь, что это имеет смысл. –

ответ

0

Вы не нуждаетесь в регулярном выражении. Есть:

str_replace(array('\\', $this->_config->delimiter()), 
      array('\\\\', '\\' . $this->_config->delimiter()), 
      $variable); 
+0

Не следует помещать 'array ('\', $ this -> _ config-> delimiter()), array ('\\', '\'. $ This -> _ config-> delimiter ()) ', почему двойная обратная косая черта? NVM - я вижу, потому что он ускользает от котировок в массиве: P –

+0

BTW обязательно сделайте их в этом порядке. Если вы сначала поместите разделитель, а затем обратную косую черту, обратная косая черта также удалит обратную косую черту, которую вы только что добавили перед разделителем. (Функция работает слева направо.) – Ariel

0

Вы можете использовать strtr[docs]:

$input = strtr($input, array(
    $this->_config->delimiter() => '\\' . $this->_config->delimiter(), 
    '\\' => '\\\\' 
)); 

DEMO

+0

strtr работает только с одиночными байтами. Это не будет работать. – Ariel

+0

@ Ариэль: Вы пробовали демо? Работает на меня. Если вы передаете массив, вы можете использовать любую строку. –

+0

Я просто проверил документы. Похоже, что они имеют специальную оболочку версии массива функции. – Ariel

Смежные вопросы