Строка Луа.матч использует нерегулярные регулярные выражения?
Мне любопытно, почему это не работает, и нужно знать, почему/как обойти это; я пытаюсь определить, является ли какой-то вход вопросом, я уверен, что строка.матч - это то, что мне нужно, но:
print(string.match("how much wood?", "(how|who|what|where|why|when).*\?"))
Возвращает nil. Я почти уверен, что это строка Луа.match использует регулярные выражения для поиска совпадений в строке, как я использовал подстановочные знаки (.) раньше с успехом, но, может быть, я не понимаю всей механики? Луа не требует специальных разделителей в строке функций? Я проверил мое регулярное выражение здесь , так что если Lua использует регулярные регулярные выражения, то, похоже, приведенный выше код вернет "how much wood?".
Может ли кто-нибудь из вас сказать мне, что я делаю неправильно, что я собираюсь делать, или указать мне хорошую ссылку, где я могу получить исчерпывающую информацию о том, как функции обработки строк Lua используют регулярные выражения?
2 ответов:
Lua не использует регулярное выражение. Lua использует шаблоны , которые выглядят похожими, но соответствуют различным входным данным.
.*будет также потреблять последний?из входных данных, так что он терпит неудачу на\\?. Вопросительный знак следует исключить. Специальные символы экранируются с помощью%.Как сказал Омри Барел, нет никакого оператора чередования. Вероятно, вам нужно использовать несколько шаблонов, по одному для каждого альтернативного слова в начале предложения. Или вы можете использовать библиотеку, которая поддерживает регулярное выражение например, выражения."how[^?]*%?"
Согласно руководству , шаблоны не поддерживают чередование.
Так что пока
"how.*"работает,"(how|what).*"нет.И капеп прав насчет того, что вопросительный знак проглатывается
.*.Есть связанный с этим вопрос: Lua pattern matching vs regular expressions.
Comments