Возможное совпадение (казалось бы) неверного шаблона 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"
,