构建 Swift/ObjC 正则表达式

Building Swift / ObjC regular expression

在文本字符串中,我试图获取介于

之间的所有内容

[DATA FORMAT]/DATA FORMAT]

Columns Format:/DATA FORMAT]

为此我使用了正则表达式。

虽然模式

"\[DATA FORMAT\](.*?)\[/DATA FORMAT\]"

按预期工作,模式

"Columns Format(*.?)\[/DATA FORMAT\]"

报错

Optional("The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.") The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.

打印在控制台(第一行:localizedFailureReason,第二行line:localizedDescription)

我错过了什么?

代码:

extension String
{
    func match (pattern: String,
                options: RegularExpression.Options = [.caseInsensitive, .dotMatchesLineSeparators]) -> [String]
    {
        do
        {
            let regex     = try RegularExpression(pattern: pattern, options: options)
            let regexAnsw = regex.matches(in: self, options: RegularExpression.MatchingOptions.withTransparentBounds, range: NSMakeRange(0, self.characters.count))

            var retStrings = [String]()

            for rs in regexAnsw
            {
                if let range = self.range(from: rs.range)
                {
                    retStrings.append(self.substring(with: range))
                }
                else
                {
                    print("match: cant' convert NSRange to range")
                }
            }

            return retStrings
        }
        catch let error as NSError
        {
            print(error.localizedFailureReason)
            print(error.localizedDescription)

            return [String]()
        }
    }
}

您在第二个正则表达式中交换了 *.(在 "Column Format" 之后的捕获组中)。这使得正则表达式无效; * 没有指代任何东西。