Regex для изменения параметра вызова метода - PullRequest
0 голосов
/ 12 апреля 2010

регулярные выражения заставляют меня плакать, поэтому я пришел сюда за помощью.

Я ищу несколько советов по поиску и замене в Паника Кода . Я знаю F & R это довольно прогресс, но я просто ищу лучший способ сделать это. Я пытаюсь переписать «движок шаблонов» (очень простой) webapp Я пишу в PHP (CodeIgniter).

В настоящее время я называю свой шаблон так:

$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view('subviews/template/sidebar');
$this->load->view('The-View-I-Want-To-Load');   // This is the important line
$this->load->view('subviews/template/footerview');

Однако неэффективно использовать пять строк кода каждый раз, когда я хочу загрузить другую страницу, в каждом другом контроллере. Поэтому я переписал это так:

$data['view'] = 'The-View-I-Want-To-Load';
$this->load->view('template',$data);

Таким образом, если мне нужно будет внести какие-то серьезные изменения в дизайн, он может это легко сделать из файла представления template.php (который содержит заголовок, меню, боковые панели и т. д. и т. д.).

Однако я использую предыдущие 5 строк повсюду во многих разные контроллеры и функции. Итак, мой вопрос --- Как я могу найти и заменить старый шаблонный движок (5 строк кода) на новый один - подставляя во имя представления в важный, уникальный строка для одного в $ data ['view]?

Это имеет какой-то смысл ?! Если нет, я попробую перефразировать! Я имею в виду, есть ли способ сделать это через Regex или что-то? Или я здесь совершенно не в том направлении?

1 Ответ

1 голос
/ 12 апреля 2010

Ваше регулярное выражение будет выглядеть примерно так:

\$this->load->view\('subviews/template/headerview'\);\n\$this->load->view\('subviews/template/menuview'\);\n\$this->load->view\('subviews/template/sidebar'\);\n\$this->load->view\('([^']*)'\);\n\$this->load->view\('subviews/template/footerview'\);

и заменить на

\$data['view'] = '$1';\n\$this->load->view('template',\$data);
...