Главная

Golang


Статья

Регулярные выражения (RegEx) в Go (Golang)

Регулярные выражения(RegEx) — система обработки текста, основанная на специальной системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, иногда называют шаблоном или маской.

Основные квантификаторы, якоря и спецсимволы:

^ - обозначение начала строки
$ - обозначение конца строки
| - или
\ - экранирование для метасимволов (не работает в символьных классах)
[…] - символьный класс
[^…] - инвертированный символьный класс
. - совпадение с любым символом, кроме символа новой строки
? - предшествующий символ необязателен
* - любое количество предшествующего символа(выражения) , в том числе и 0
+ - хотя бы 1 предшествующий символ (выражение) должен быть найден

{max,min} – минимальное и максимальное количество совпадений для предшествующего символа(выражения)

Если в конце любого квантификатора (?,*,+) поставить символ ? то будет использоваться алгоритм захватывающий минимально возможное совпадение.

Для использования RegEx в golang необходимо подключить пакет regexp.

При создании шаблона обычно используют метод regexp.MustCompile(p).В случае неуспешной компиляции возникает аварийная ситуация. Такой подход упрощает использование переменных, содержащих скомпилированные выражения. Если нужно только проверить наличие совпадения, достаточно использовать метод regexp.MatchString(p, s)

Этот метод возвращает true или false в зависимости от того соответствует строка s шаблону p или нет. Также будет возвращено nil в качестве ошибки.

У многих методов есть реализации для случая, когда исходная строка представлена не типом string , а типом []byte.

Пример проверки на совпадение:


[...] перечисление букв
[abc] - находим всё где есть "a" или "b" или "c"
[a-c] - тоже самое
/[bcr]at/ - находим "bat" или "cat" или "rat"


[^...] - что угодно кроме
/[^abc]/ - что угодно кроме букв "a"или "b" или "c"
/[^a-zA-Z]/ - что угодно кроме букв алфавита

\d - только цифры .
\s - пробельные символы т.е. [\ \t\r\n\f] пробел , перенос строки, табуляция и т.д.
\w - любые буквы и цифры (английские + русские )
\D - не цифра (отрицание предыдущего)
\S - не пробел
\W - не буквы и цифры
\N - что угодно кроме "\n"
. - что угодно кроме "\n"
^ - начало строки
$ - конец строки

Квантификатор - ставится после выражения

? - 0 или 1 (либо есть либо нет , хз)
*- 0 или более (либо нет либо дохуя)
+ - 1 или более (либо есть либо дохуя)
{x} - буква пресутствует подряд x раз ( [a]{3} = "aaa")
{x,y} - от х до y включительно
{ ,y} - от нуля до y включительно
{x, } - от х до бесконечности



Готовые примеры :
Дата время
\d{4}-\d{2}-\d{2} - 2015-10-14
\d{2}:\d{2}:\d{2} - 19:35:01
[п].*[я] - "урок №123 про регулярные выражения Hello"