我正试图解析一个.ics文件中的位置条目,如下图所示。正常情况下,这很好,即使我能找到的唯一测试仪是PCRE而不是ICU,因为我只需要在任何特殊字符上添加一个额外的反斜杠。
但是在swift中,我得到了以下结果:

"^Location" //No Match
"^VERSION" //No Match
"^BEGIN" //Match
"^ :" //Match

我能让“^”锚像在PCRE测试仪中那样工作吗?
PCRE regex测试仪
regex - 为什么我的线 anchor 无法正常运行?-LMLPHP
代码
func testParticipantParsing()
{
    //let locationRegex = "^LOCATION:(.*(?:\\n :?.*)*)"
    let locationRegex = "LOCATION:(.*(?:\\n :?.*)*)"
    var regex : NSRegularExpression! = nil
    var resultsArray = [String]()

//Parse for location
    do
    {
        regex = try NSRegularExpression(pattern: locationRegex, options: NSRegularExpressionOptions.init(rawValue: 0))
        let nsString = content as NSString
        let results = regex.matchesInString(content, options: [], range: NSMakeRange(0, nsString.length))
        resultsArray = results.map{ nsString.substringWithRange($0.range) }
    }
    //Catch errors if regex fails
    catch
    {
        print("invalid regex")
    }
    //Strip .ics new line tokens
    for var result in resultsArray
    {
        result = result.stringByReplacingOccurrencesOfString("\n :", withString: "")
        result = result.stringByReplacingOccurrencesOfString("\n ", withString: "")
        print(result)
    }
}

最佳答案

只需在模式的开头添加(?m)

let locationRegex = "(?m)^LOCATION:(.*(?:\\n :?.*)*)"
                     ^^^^

(?m)是多行修饰符的内联修饰符版本,它强制^匹配行首的位置而不是字符串(并使$匹配行尾的位置,在换行序列之前)。
Table 4: Flag Options
m标志:
控制模式中^$的行为。默认情况下,它们只在输入文本的开头和结尾分别匹配。如果设置了此标志,^$也将在输入文本中每行的开始和结束处匹配。

关于regex - 为什么我的线 anchor 无法正常运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34945075/

10-12 12:38
查看更多