Почему мой SemVer NSRegularExpression не работает?


Я пытаюсь сделать регулярное выражение, которое соответствует семантической версии (SemVer) 2.0.0 . Это моя первая попытка:

^(?'major'd+).(?'minor'd+)(?:.(?'patch'd+))?(?:-(?'preRelease'(?:(?'preReleaseId'[0-9A-Za-z-]+).?)+))?(?:+(?'build'(?:(?'buildId'[0-9A-Za-z-]+).?)+))?$

RegEx101

Это проходит мои тесты на курение, но когда я пытаюсь на самом деле сделать это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 2

1 ответ:

Похоже, вы пытаетесь использовать именованные группы в своем регулярном выражении. NSRegularExpression именованные группы используют угловые скобки, а не одинарные кавычки, которые есть в вашем регулярном выражении. Попробуйте использовать синтаксис

`(?<groupName>...)`

Для ваших именованных групп захвата.