【问题标题】:Building Swift / ObjC regular expression构建 Swift / ObjC 正则表达式
【发布时间】:2016-08-01 01:23:43
【问题描述】:

在一个文本字符串中,我试图获取之间的所有内容

[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,第二行: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]()
        }
    }
}

【问题讨论】:

    标签: swift nsregularexpression


    【解决方案1】:

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

    【讨论】:

    • 天啊。非常感谢。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2014-09-24
    相关资源
    最近更新 更多