Почему мой SemVer NSRegularExpression не работает?
Я пытаюсь сделать регулярное выражение, которое соответствует семантической версии (SemVer) 2.0.0 . Это моя первая попытка:
^(?'major'd+).(?'minor'd+)(?:.(?'patch'd+))?(?:-(?'preRelease'(?:(?'preReleaseId'[0-9A-Za-z-]+).?)+))?(?:+(?'build'(?:(?'buildId'[0-9A-Za-z-]+).?)+))?$
Это проходит мои тесты на курение, но когда я пытаюсь на самом деле сделать этоNSRegularExpression
, я получаю это:
Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=2048 "The value “^(?'major'd+).(?'minor'd+)(?:.(?'patch'd+))?(?:-(?'preRelease'(?:(?'preReleaseId'[0-9A-Za-z-]+).?)+))?(?:+(?'build'(?:(?'buildId'[0-9A-Za-z-]+).?)+))?$” is invalid." UserInfo={NSInvalidValue=^(?'major'd+).(?'minor'd+)(?:.(?'patch'd+))?(?:-(?'preRelease'(?:(?'preReleaseId'[0-9A-Za-z-]+).?)+))?(?:+(?'build'(?:(?'buildId'[0-9A-Za-z-]+).?)+))?$}: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/swift/stdlib/public/core/ErrorType.swift, line 181
Почему? Я не могу найти в интернете ничего о том, что NSRegularExpression
ожидает / принимает, поэтому я не знаю, что я сделал неправильно здесь.
Swift код:
public static let regex = try! NSRegularExpression(pattern:
"^(?'major'\d+)\." +
"(?'minor'\d+)" +
"(?:\.(?'patch'\d+))?" +
"(?:-(?'preRelease'(?:(?'preReleaseId'[0-9A-Za-z-]+)\.?)+))?" +
"(?:\+(?'build'(?:(?'buildId'[0-9A-Za-z-]+)\.?)+))?$",
options: .caseInsensitive)
1 ответ:
Похоже, вы пытаетесь использовать именованные группы в своем регулярном выражении.
NSRegularExpression
именованные группы используют угловые скобки, а не одинарные кавычки, которые есть в вашем регулярном выражении. Попробуйте использовать синтаксис`(?<groupName>...)`
Для ваших именованных групп захвата.