Когато за пръв път видях Regular Expressions, ми се сториха нещо много яко и митично. И затова отделих доста време за да ги науча. Но в последствие се оказаха не толкова често използвано от мен средство. Най-често те са ми бързото решение, което в последствие се заменя с нещо по-добро. Но въпреки това ги използвам почти всеки ден.
Това за което ги ползвам е най-обикновен search & replace във файл (или проект). Това страшно много ми ускорява работата. Прост пример:
<a href="#">Link 1</a> |
<a href="#">Link 2</a> |
<a href="#">Link 3</a> |
<a href="#">Link 4</a> |
<a href="#">Link 5</a> |
<a href="#">Link 5</a> |
<a href="#">Link 6</a> |
И искаме да стане:
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
<li><a href="#">Link 5</a></li>
<li><a href="#">Link 6</a></li>
За целта просто заменяме “(<a.*) \|” с “<li>$1</li>”
Find: (<a.*) \|
Replace: <li>$1</li>
Като в някой редактори $1 съм го виждал като \1.
Друг “трик”, който ползвах когато писах PHP беше да преименувам даден метод (кой ме би по главата да не ползвам някое IDE е друга тема):
// от това
$foo->someMethod($foo1, "foo2", 'foo3');
$bar->someMethod($bar1, "bar2", 'bar3');
// трябва да се получи (забележете разменените аргументи)
$foo->otherAction("foo2", 'foo3', $foo1);
$bar->otherAction("bar2", 'bar3', $bar1);
За целта просто:
Find: ->someMethod\(([^,]*), ([^,]*), ([^,]*)\)
Replace: ->otherAction($2, $3, $1)
Като този пример може много да се деформира и много зависи от името на метода и дали няма други методи с това име във файла. И е добре винаги да имате тестове който да потвърждават че всичкия код който сте променили работи.
Много често ползвам Regular Expressions по няколко пъти докато направя каквото ми трябва и го комбинирам със някои Textmate фунции (като ако сте под windows/linux препоръчвам E Texteditor). Естествено гледам да не прекалявам с това. Защото в един момент може и да не си заслужава мисленето на някакъв сложен pattern. След като добрия стар ръчен find & replace би свършил работа.
Ако някой има въпроси по горните примери или ако има съвети и мнение по въпроса ще се радвам да ги чуя.