2012-05-27 3 views
0

У меня есть длинный PHP-файл, и я хочу скопировать все имена переменных только и построить запрос на вставку sql. Есть ли способ, по которому я могу искать шаблон, используя регулярное выражение, и конкатенировать результат поиска, пока я не соберу всю переменную и не выплюнул бы ее в инструкции?Найти и объединить результат в шаблоне

Я использую TextMate и знаком с поиском регулярных выражений. Результат поиска в Regex дает аргументы $ 0, $ 1 и т. Д. Не знаю, возможно ли это. Решение в любом редакторе будет не просто текстовым помощником.

У меня только слишком много переменных (+100), не хочется копировать каждый. Здесь мой примерный файл

$ID = $_POST['id']; 
$TXN_TYPE = $_POST['txn_type']; 
$CHARSET = $_POST['charset'] 
$CUSTOM = $_POST['custom']; 

ответ

0

Мое собственное решение - сделать обратный. Возможно, это невозможно.

Оставьте только имена переменных Удалите все остальное. Использовать

[space].+ regex to remove everything that is after the variable name. 

очистить файл, чтобы остались только имена переменных. затем выполните еще пару поиска и замены, чтобы принести имя переменной в нужную вам форму.

1

Вы можете попробовать что-то с get_defined_vars(). Однако эта функция также отображает GLOBAL vars. Вы можете использовать этот фрагмент, чтобы удалить их, если вы не хотите их, и отображать только те варны, которые вы определили.

$ variables = array_diff (get_defined_vars(), array (array()));

Однако этот фрагмент генерирует уведомления, и я еще не нашел способ их решить.

Если у вас есть переменные $ _POST, вы можете пересечь сам массив $ _POST. Вы создаете SQL программно, перейдя через массив.

0

Если вы хотите, чтобы соответствовать только именам переменных (не $_POST индексов массива), то регулярное выражение в значительной степени обеспечивается in the PHP documentation:

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

Это, конечно, включает в себя $ _POST, но это должно быть достаточно легко удалить. Если нет, то вы можете сделать это с отрицательным предпросмотром (если TextMate поддерживает):

\$(?!_POST($|[^a-zA-Z0-9_\x7f-\xff]))[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 
+0

Стоит отметить, что это будет возвращать ложные срабатывания, если ваш файл PHP включены строки, как '$ ASDF =«asdfklasdflkj $ asdfasdf»; ' , Я предполагаю, что это не так, но если вы хотите что-то более мощное, вам лучше избегать регулярных выражений в пользу решения, более похожего на Constantine's. –

+0

Выглядит хорошо, я буду исследовать. Хотя я уже использовал свое решение. –