swift 正则表达式配置

标签 swift regex

我收到类似“hello @[dbe9234d-9e59-94b01-42342c9sd](user_name) how are you?”这样的字符串。我想使用正则表达式来提取正则表达式的“user_name”部分。我正在使用以下正则表达式,它返回整个表达式(我只需要用户名)部分。有什么想法吗?

let source = "hello @[dbe9234d-9e59-94b01-42342c9sd](user_name) how are you?"
typePattern = "@\\[[a-z0-9-\\-]+\\]\\((\\w+)\\)"

if let typeRange = source.range(of: typePattern,
                                options: .regularExpression) {
    print("First type: \(source[typeRange])")
// First type: @[dbe9234d-9e59-94b01-42342c9sd](user_name)
}

最佳答案

使用您当前的正则表达式 @\[[a-z0-9-\-]+\]\((\w+)\) 用户名在第一个捕获组中 (\\w+) .

我认为您可以将字符类更新为 [a-z0-9-] ) 使用单个连字符。

如果您不想使用捕获组并且您的正则表达式引擎支持后视 (?<=那么你可以匹配:

(?<=]\()[^)]+(?=\))

typePattern = "(?<=]\\()[^)]+(?=\\))"

这断言左侧是一个右括号和一个左括号 (?<=]\()然后使用否定字符类 [^)]+ 不匹配左括号并使用正 lookahead断言后面是一个 )

关于 swift 正则表达式配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047534/

相关文章:

ios - 使用 IGListKit 在layoutSubviews() 中更改 UICollectionView 的框架和 contentInset

php - 如何 preg_match 第一次出现在字符串中

Java 正则表达式 ReplaceAll 未按预期工作

swift - Firebase远程配置不更新值?

objective-c - 从 Objective C 库初始化 Swift 类

swift - 线程 1 : signal SIGABRT error when using IBActions?

javascript - 如何使用正则表达式通过 jQuery 按 ID 选择元素?

java - Swift 2.0 中的抽象类

regex - 为什么我的 Perl 正则表达式会提示 "Unmatched ) in regex"?

java - 正则表达式匹配-Java