正则表达式模式不包含第一个字符

时间:2015-07-02 18:42:51

标签: regex swift

我正在使用此正则表达式模式:@[a-zA-Z0-9-_]+以匹配字符串中的@usernames。

@alex,whatsup
@brian @mary很酷的照片

grey中突出显示的文本是正则表达式模式返回的内容,但我希望它在 @字符后返回所有内容。所以我真正想要的是:

嘿@ alex,whatsup
@ brian @ mary很酷的照片

我该如何更改模式?

2 个答案:

答案 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,请进行一些更改