Intereting Posts

Вопрос PHP Regex

Можно ли создать регулярное выражение, которое читает {variable} как <?php echo $variable ?> В файлах PHP?

благодаря

Remy

Solutions Collecting From Web of "Вопрос PHP Regex"

Руководство PHP уже предоставляет регулярное выражение для имен переменных :

 [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 

Вам просто нужно изменить его на это:

 \{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\} 

И вы сделали.


Редактировать. Вы должны знать, что простая последовательная замена таких случаев, как предложенный Росс, может вызвать некоторое нежелательное поведение, когда, например, подстановка также содержит такие переменные.

Поэтому вам лучше разобрать код и заменить эти переменные отдельно. Пример:

 $tokens = preg_split('/(\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i=1, $n=count($tokens); $i<$n; $i+=2) { $name = substr($tokens[$i], 1, -1); if (isset($variables[$name])) { $tokens[$i] = $variables[$name]; } else { // Error: variable missing } } $string = implode('', $tokens); 

Похоже, вы пытаетесь сделать замену переменной шаблона;)

Я бы посоветовал сначала собрать ваши переменные в массиве, а затем использовать что-то вроде:

 // Variables are stored in $vars which is an array foreach ($vars as $name => $value) { $str = str_replace('{' . $name . '}', $value, $str); } 

{На самом деле не ответ, но нужно уточнение}

Не могли бы вы расширить свой вопрос? Вы хотите применить регулярное выражение к содержимому переменной $?

Следующая строка должна заменить все вхождения строки ' {variable} ' значением глобальной переменной $variable :

 $mystring = preg_replace_callback( '/\{([a-zA-Z][\w\d]+)\}/', create_function('$matches', 'return $GLOBALS[$matches[1]];'), $mystring); 

Изменить: замените регулярное выражение, используемое здесь, на упомянутое Gumbo, чтобы точно уловить все возможные имена переменных PHP.

( в комментариях ) Я хочу, чтобы иметь возможность вводить {variable} вместо <?php echo $variable ?>

Примитивный подход : вы можете использовать внешнюю программу (например, скрипт Python) для предварительной обработки ваших файлов, делая следующую замену регулярных выражений:

 "{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}" 

с

 "<?php echo $\g<1> ?>" 

Лучший подход : напишите макрос в своей среде IDE или редакторе кода, чтобы автоматически сделать замену для вас.