我试图解析下面的图像中看到的.ics文件中的位置条目。通常这工作正常,即使我能找到的唯一测试者是PCRE而不是ICU,因为我只需要为任何特殊字符添加额外的反斜杠。为什么我的线路锚点不能按我的预期运行?
然而,在迅速我得到以下结果:
"^Location" //No Match
"^VERSION" //No Match
"^BEGIN" //Match
"^ :" //Match
我可以得到“^”锚功能就像他们在PCRE测试仪吗?
代码
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)
}
}
请注意,您的正则表达式不处理'LOCATION'的不同情况,该属性中的参数以及关键字'LOCATION'被拆分为多行,所有这些都是iCalendar中的有效事情。你最好使用真正的解析器。 – Evert
@Evert我想,但与迅速2相对较新,我找不到任何东西;或者至少没有正确的许可证。我可能误解了你,但是我认为我已经通过行锚处理了这一点,因为所有实例都是用户创建一个新行,它们本身似乎在新行开始处附加了分隔符':',如果如第11行所示,自然发生了。我可能错过了一些你认为有时候'\ nLOCATION:'可能会一起出现的东西? – Deco
只是给你一个例子,这也是有效的:'lOcA \ r \ n \ ttION; x-param = foo; x-param2 =“hello ::”:actualvalue \ r \ n' – Evert