Lua string.match использует нерегулярные регулярные выражения? - PullRequest
7 голосов
/ 21 августа 2011

Мне любопытно, почему это не работает, и мне нужно знать, почему / как обойти это; Я пытаюсь определить, является ли какой-то ввод вопросом, я уверен, что мне нужен string.match, но:

print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))

возвращает ноль. Я почти уверен, что Lua string.match использует регулярные выражения для поиска совпадений в строке, так как раньше я успешно использовал символы подстановки (.), Но, может быть, я не понимаю всю механику? Требует ли Lua специальных разделителей в своих строковых функциях? Я протестировал мое регулярное выражение здесь , поэтому, если Lua использует регулярные регулярные выражения, похоже, что приведенный выше код вернет "how much wood?".

Кто-нибудь из вас может сказать мне, что я делаю неправильно, что я собираюсь сделать, или указать мне хороший справочник, где я могу получить исчерпывающую информацию о том, как функции манипуляции со строками Lua используют регулярные выражения?

Ответы [ 2 ]

13 голосов
/ 21 августа 2011

Луа не использует регулярные выражения.Lua использует паттерны , которые выглядят одинаково, но соответствуют разным входным данным.

.* также будет потреблять последние ? входных данных, поэтому при \\? произойдет сбой.Вопросительный знак должен быть исключен.Специальные символы экранируются с помощью %.

"how[^?]*%?"

Как сказал Омри Барел, оператора чередования нет.Вам, вероятно, нужно использовать несколько шаблонов, по одному для каждого альтернативного слова в начале предложения.Или вы можете использовать библиотеку, которая поддерживает выражения как выражения.

9 голосов
/ 21 августа 2011

Согласно руководству , шаблоны не поддерживают чередование.

Так что пока "how.*" работает, "(how|what).*" не работает.

И Капеп праввопросительный знак проглатывается .*.

С этим связан вопрос: сопоставление шаблона Lua с регулярными выражениями .

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