Что такое висячие метасимволы в регулярных выражениях?

В Ruby я написал простое регулярное выражение, чтобы найти первое {:

txt.gsub! /^.*{/, '{'

Всякий раз, когда я запускаю это, все, что прошло после этой точки для моих целей, работает нормально, однако есть небольшая ошибка, которая читается в соответствии с WARNING: Dangling metacharacter detected. Что конкретно представляют собой висячие метасимволы, и как бы я изменил свое регулярное выражение, чтобы оно было настолько явным и эффективным, насколько это возможно?

1 ответ

Решение

{ имеет особое значение в регулярном выражении.

PATTERN{m,n}

Выше совпадения PATTERN повторяются много раз.

Если вы хотите избежать этого предупреждения (буквально совпадать {) избежать этого.

txt.gsub! /^.*\{/, '{'

ОБНОВИТЬ

КСТАТИ, /^.*{/ не ловит первый { так как .* жадная спичка; Это потребляет как можно больше.

Другие вопросы по тегам