Dnešní IDE mají skvělou podporu pro refaktorování, ale občas si s nabízenými možnostmi nevystačím. Naštěstí pořád je k dispozici replace all. To ovšem začne být zajímavě mocné, až když zapojíte regulární výrazy. Fousatý vtip říká, že máte-li problém a rozhodnete se ho řešit regulárním výrazem, máte problémy rázem dva. Mnozí z vás už jistě používáte ChatGPT či Copilot, ale já zatím lovil svoje poznámky. Tak je pro jistotu zveřejňuji, abych je vždycky našel.

Konkrétní případ použití

Asi jako každý programátor mám určité projevy OCD a neučesaný kód mi nedá spát.

Naposledy jsem šel kolem kódu s podobnými Spring anotacemi.

@RequestMapping(value = "admin/users/{id}", method = RequestMethod.GET)

Spring Framework od verze 4.3 z roku 2016 umožňuje psát.

@GetMapping(value = "/admin/users/{id}")

Respektive můžete dokonce zkrátit na následující.

@GetMapping("/admin/users/{id}")

No jo, jenže v projektu byly desítky a stovky výskytů. Co s tím? Ano, zachrání nás regulární výrazy.

Zásadní schopnost jsou (v anglické terminologii) capturing group a backreference (česky seskupování a zpětné odkazování). Ohledně regulárních výrazů byly napsány celé knihy, tak se nechci pouštět na tenký led. Osobně ladím regex pomocí nástroje regexr.com, který umí krásně vizualizovat a vysvětlovat.

Pojďme na konkrétní použití. Hledaný výraz může být například:

@RequestMapping\(value = "(.+?)", method = RequestMethod\.GET\)

A nahrazujeme za:

@GetMapping("$1")

Úpravu pro další HTTP metody jako POST a další nechám na laskavého čtenáře.

Závěr

Nedaří-li se vám snadno napasovat replace all, nezapomeňte, že můžete zapojit regulární výrazy. Seskupování a zpětné odkazování z hlavy nedávám, ale vím, že najdu ve svých poznámkách.

Související