Как использовать квантификаторы регулярных выражений * и + для пользовательского правила SwiftLint

Я пытаюсь написать собственное правило для SwiftLint. Следуя указаниям в файле readme, я добавил в .swiftlint.yml следующее:

custom_rules:
  multi_clause_guard:
    regex: 'guard .*,'

Однако это регулярное выражение не соответствует ни одной строке в моем проекте, несмотря на то, что есть много строк, где оно должно совпадать, например:

guard let x = Int(s), let y = Int(t) else { return }

Я пробовал различные другие значения для регулярного выражения, и оно работает, пока вы не вводите квантификатор.

  • 'guard .,' будет соответствовать строке guard a,
  • 'guard ..,' будет соответствовать строке guard _a,
  • 'guard .*,' не будет соответствовать строке guard a,
  • 'guard .+,' не будет соответствовать строке guard a,

Есть ли способ использовать * и + в пользовательском правиле SwiftLint?


person Oletha    schedule 02.08.2017    source источник


Ответы (1)


Кажется, что квантификаторы можно применять к наборам символов, которые вы определяете явно. В этом случае мне было достаточно заменить . на [\h\S] (включая горизонтальные пробелы и любые другие символы, не являющиеся пробелами).

custom_rules:
  multi_clause_guard:
    regex: 'guard [\h\S]*,'

Если кто-нибудь знает, как заставить квантификаторы работать с ., мне все равно интересно узнать!

person Oletha    schedule 02.08.2017
comment
OMG, я бы хотел, чтобы я Google это раньше. Мне потребовалось 3 часа, чтобы попробовать и ошибиться. - person stan liu; 23.03.2019