Где изучать и создавать сложные регулярные выражения
Поделюсь способом упрощения задачи написания сложных регулярных конструкций. Вопреки мнению сторонников создавать мелкие выражения для извлечения искомого по частям, иногда это менее продуктивно, например, когда местонахождение одних фраз зависит от других (как при извлечении полного адреса). В этом случае проще написать одно большое регулярное выражение. Однако сразу возникает ряд проблем, касающихся его частичной модификации и понимания третьей стороной.
Поэтому я рекомендую пользоваться онлайн сервисами, одним из которых является сайт regex101.com. Он удобно визуализирует и поясняет логические части регулярных выражений, а также выделяет места в искомой строке, где они встречаются. Разберем конкретный пример:
В окне Regular Expression задаем регулярное выражение, а ниже в Test String - проверяемую строку. В окне регулярных выражений можно перемещать курсор по скобкам, и конец одной части будет подсвечиваться голубым цветом, плюс содержащиеся в ней одноуровневые части будут также подсвечены. На примере ниже, в условной конструкции, проверяющей наличие блока space выделено ее начало разделитель "|" (ИЛИ) и конец.
В окне справа (EXPLANATION) регулярное выражение разбито на части, которые детально описываются. Видно, что там начинается описание именованной части city и продолжается ниже, распознана даже условная конструкция:
В окне TEST STRING подсвечиваются найденные части:
А чуть правее указывается более детальное описание результатов для каждой из подстрок тестовой строки, в которых найдено регулярное выражение (именуются Match X):