#ruby #regex #oniguruma
#ruby #регулярное выражение #онигурума
Вопрос:
Я редактирую грамматику TextMate для SQL. В настоящее время он содержит регулярное выражение (ключевые слова опущены для уточнения):
(?i:^s*(create)s (aggregate|function|(uniques )?index|table)s )(['"`]?)(w )4
Это правильно соответствует определению функции, например
CREATE FUNCTION similarity
Я хотел обработать CREATE OR REPLACE
, поэтому я изменил регулярное выражение на
(?i:^s*(create(s ors replace)?)s (aggregate|function|(uniques )?index|table)s )(['"`]?)(w )4
и это не будет соответствовать a CREATE
или a CREATE OR REPLACE
. Я исправил это, сделав новую необязательную группу пассивной:
(?i:^s*(create(?i:s ors replace)?)s (aggregate|function|(uniques )?index|table)s )(['"`]?)(w )4
Но.. почему это не совпадало раньше? Я ожидал бы, что он будет совпадать, но затем, возможно, даст мне группу захвата, которую я не ожидал (если индикатор внешней пассивной группы не попадает в новую внутреннюю группу).
Ответ №1:
Это был ваш 4 — вам нужно было изменить его на 5, когда вы впервые добавили новые скобки.