Почему я получаю успешные, но пустые регулярные выражения? - PullRequest
0 голосов
/ 08 марта 2009

Я ищу шаблон (.*)\\1 в тексте blabl с regexec(). Я получаю успешные, но пустые совпадения в regmatch_t структурах. Что именно было подобрано?

Ответы [ 3 ]

5 голосов
/ 08 марта 2009

Регулярное выражение. * Может успешно соответствовать строке из нулевых символов или ничего, что происходит между соседними символами.

Таким образом, ваш шаблон соответствует нулевым символам в скобках, а затем соответствует нулевым символам сразу после этого.

Таким образом, если бы ваше регулярное выражение было /f(.*)\1/, оно совпадало бы со строкой "foo" между 'f' и первым 'o'.

Вы можете попробовать использовать .+ вместо .*, так как это соответствует одному или нескольким вместо нуля или более. (Используя. + Вы должны соответствовать 'oo' в 'foo')

0 голосов
/ 08 марта 2009

\ 1 - инструкция «повторного совпадения». Вопрос заключается в том, хотите ли вы немедленно повторить матч (например, BLABLA )

/(.+)\1/

или более поздняя (например, BLA ahem BLA )

/(.+).*\1/
0 голосов
/ 08 марта 2009

\ 1 - это обратная ссылка, обычно используемая для замены позже или при попытке дальнейшего уточнения вашего регулярного выражения путем получения совпадения внутри совпадения. Вы должны просто использовать (. *), Это даст вам нужные результаты и автоматически получит номер обратной ссылки 1. Я не эксперт по регулярным выражениям, но это мои мысли, основанные на моих ограниченных знаниях.

Кроме того, я всегда возвращаюсь к RegexBuddy, когда пытаюсь увидеть, что на самом деле происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...