我正在尝试解析.ics文件中的位置条目,如下图所示。通常情况下这很好,即使我找到的唯一的测试人员是PCRE而不是ICU,因为我只需要为任何特殊字符添加额外的反斜杠。
然而,在swift中,我得到以下结果:
"^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)
}
}
答案 0 :(得分:1)
只需在模式的开头添加(?m)
。
let locationRegex = "(?m)^LOCATION:(.*(?:\\n :?.*)*)"
^^^^
(?m)
是MULTILINE修饰符的内联修饰符版本,强制^
匹配行开头的位置,而不是 string (并使$
匹配行末尾的位置,在换行符序列之前。)
m
标志:
控制模式中^
和$
的行为。默认情况下,这些只会分别匹配输入文本的开头和结尾。如果设置了此标记,则^
和$
也会在输入文本中每行的开头和结尾处匹配。