Возможное совпадение (казалось бы) неверного шаблона Lua

Я знаю, что вы не можете повторять матч-группы в Lua. Например, если я хотел сопоставить два последовательных "45" х, я не могу сделать:

print(string.find("some 4545 text", "(%d%d)+"))

который напечатает nil (совпадений не найдено).

Тем не менее, так как find(...) не сообщает об ошибке (для недопустимых шаблонов "%" а также "(%d" ошибки производятся), это заставляет меня поверить в закономерность "(%d%d)+" является действительным.

Если "(%d%d)+" действительный шаблон, чему он соответствует? И если это не так, есть ли какая-то конкретная причина, по которой ошибка не возникает?

2 ответа

Решение

"(%d%d)+" является допустимым шаблоном. Например, он соответствует "примерно 45+67 текст" или "около 4567+ текст" и содержит "45" в первом случае и "67" во втором.

Чтобы сопоставить два последовательных вхождения строки цифр, используйте "(%d+)%1",

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