Голанг | Специальные символы регулярного выражения Escape для создания допустимой строки для regexp.MustCompile () method [duplicate]

Я думаю, что соответствующие части стандарта C99 составляют 6.5. Выражения, §2

. Между предыдущей и следующей точкой последовательности объект должен иметь неизменяемое значение хранимого значения не более одного раза за счет оценки выражение. Кроме того, предыдущее значение должно считываться только для определения сохраняемого значения.

и 6.5.16 Операторы присваивания, §4:

Порядок оценки операндов не определена. Если делается попытка изменить результат оператора присваивания или получить к нему доступ после следующей точки последовательности, поведение не определено.

38
задан Jeremy 16 May 2013 в 21:17
поделиться

2 ответа

Конец обратной косой черты \ не интерпретируется парсером regex, он интерпретируется в строковом литерале. Вы должны снова избежать обратной косой черты:

regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")

Строка, цитируемая с символами двойной буквы ", известна как «интерпретируемый строковый литерал» в Go. Интерпретированные строковые литералы похожи на строковые литералы на большинстве языков: \ символы обратной косой черты не включены буквально, они используются, чтобы придавать особое значение следующему символу. Источник должен включать \\ две обратные косые черты в строке, чтобы получить один символ обратной косой черты в анализируемом значении.

Поскольку Эван Шоу указал в комментариях , Go имеет другое альтернативу, которая может быть полезна при написании строковых литералов для регулярных выражений. «Необработанный строковый литерал» цитируется символами обратного вызова `. В строковом литерале нет специальных символов, поэтому, если ваш шаблон не включает обратную ссылку, вы можете использовать этот синтаксис, не избегая ничего:

regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)

Это описано в «Строковые литералы» раздела спецификации Go .

75
ответ дан Community 24 August 2018 в 17:36
поделиться

IPv4-адрес (точный захват)

Соответствует 0.0.0.0 по 255.255.255.255

Используйте это регулярное выражение для соответствия номерам IP с точностью.

Каждый из 4 номера хранятся в группе захвата, поэтому вы можете получить к ним доступ для дальнейшей обработки.

"(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"
1
ответ дан Monday 24 August 2018 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: