我正在使用此正则表达式模式:@[a-zA-Z0-9-_]+
以匹配字符串中的@usernames。
嘿@alex
,whatsup
@brian
@mary
很酷的照片
grey
中突出显示的文本是正则表达式模式返回的内容,但我希望它在 @字符后返回所有内容。所以我真正想要的是:
嘿@ alex
,whatsup
@ brian
@ mary
很酷的照片
我该如何更改模式?
答案 0 :(得分:5)
你应该使用积极的lookbehind,这需要断言以下内容:我想匹配[a-zA-Z0-9-_]+
,但只有当是("肯定")和{ {1}} 之前(因此," lookbehind")。
我并不特别了解Swift正则表达式语法,但大多数引擎都使用@
来表示正面看法。因此:
(?<=...)
Play with it on Regex101如果您愿意。
答案 1 :(得分:2)
为什么不使用捕获组呢?将圆括号放在@
后面的字母数字字符上。您的匹配仍包含@
符号,但您只捕获用户名:
let str = "Hey @alex, whatsup. @brian @mary cool photo"
let len = count(str) // if Swift 2.0 use: str.characters.count
let regex = NSRegularExpression(pattern: "@([a-zA-Z0-9-_]+)", options: nil, error:nil)
let matches = regex!.matchesInString(str, options: nil, range: NSMakeRange(0,len))
let nStr = str as NSString
for m in matches {
let r = m.rangeAtIndex(1)
println(nStr.substringWithRange(r)) // Use print in Swift 2.0
}
我没有Swift 2.0编译器,所以如果你使用的是Xcode 7 beta,请进行一些更改