2016-01-22 51 views
1

我试图解析下面的图像中看到的.ics文件中的位置条目。通常这工作正常,即使我能找到的唯一测试者是PCRE而不是ICU,因为我只需要为任何特殊字符添加额外的反斜杠。为什么我的线路锚点不能按我的预期运行?

然而,在迅速我得到以下结果:

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

我可以得到“^”锚功能就像他们在PCRE测试仪吗?

PCRE正则表达式测试仪 PCRE regex tester

代码

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) 
    } 
} 
+1

请注意,您的正则表达式不处理'LOCATION'的不同情况,该属性中的参数以及关键字'LOCATION'被拆分为多行,所有这些都是iCalendar中的有效事情。你最好使用真正的解析器。 – Evert

+0

@Evert我想,但与迅速2相对较新,我找不到任何东西;或者至少没有正确的许可证。我可能误解了你,但是我认为我已经通过行锚处理了这一点,因为所有实例都是用户创建一个新行,它们本身似乎在新行开始处附加了分隔符':',如果如第11行所示,自然发生了。我可能错过了一些你认为有时候'\ nLOCATION:'可能会一起出现的东西? – Deco

+0

只是给你一个例子,这也是有效的:'lOcA \ r \ n \ ttION; x-param = foo; x-param2 =“hello ::”:actualvalue \ r \ n' – Evert

回答

1

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

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

(?m)是迫使^在一个线的开始匹配的位置,而不是(并使得$匹配的位置在底了多行修改的在线修正版行,在换行符之前)。

参见Table 4: Flag Options

m标志:
控制^$以图案的行为。默认情况下,它们只会分别匹配输入文本的开始和结束。如果设置了该标志,则^$也将匹配输入文本内每行的开始和结尾。

+1

完美,不知道这些标志。谢谢。 – Deco

+0

哦,这些内联修饰符可能会更有趣,请参阅[Ruby正则表达式中的'?-mix'是什么](http://stackoverflow.com/questions/28630936/what-is-mix-in-a -ruby-正则表达式)。这不是任何“混合”:) –

相关问题