【问题标题】:Why regex doesn't work? Swift为什么正则表达式不起作用?迅速
【发布时间】:2014-12-03 13:48:56
【问题描述】:

我有这个适用于http://www.regexr.com 但不适用于iOS 的正则表达式。有谁知道怎么回事?

let regex = NSRegularExpression(pattern: "v=(.+?)(?=\\s|&)", options: NSRegularExpressionOptions.CaseInsensitive, error: &error)

原始正则表达式:v=(.+?)(?=\s|&)

正则表达式应用于此测试 URL(分隔):

https://www.youtube.com/watch?v=sjifp5oi6dE
https://www.youtube.com/watch?v=gdigMMGadDM&feature=relmfu
https://www.youtube.com/watch?v=gdigMMGadDM&feature=relmfu&asdsadsa
https://www.youtube.com/watch?v=gdigMMGadDM&feature=relmfu&asdsadsa&asdfasdasdasQ%4&asdsadsad
https://www.youtube.com/watch?feature=relmfu&asdsadsa&asdfasdasdasQ%4&asdsadsad&v=gdigMMGadDM

谢谢!

编辑 1:

代码如下:

// Get video ID
var error: NSError?
let regex = NSRegularExpression(pattern: "v=(.+?)(?=\\s|&)", options: NSRegularExpressionOptions.CaseInsensitive, error: &error)
println(originalURL)
println(regex)
let match: NSTextCheckingResult? = regex.firstMatchInString(originalURL, options: NSMatchingOptions(0), range: NSMakeRange(0, countElements(originalURL)))
println(match)
let videoID = (originalURL as NSString).substringWithRange(match!.range).stringByReplacingOccurrencesOfString("v=", withString: "")
println(videoID)

“匹配”为零!

编辑 2:

预期结果:regexr.com/39loc

【问题讨论】:

  • 不起作用是什么意思?
  • 很简单,没有找到匹配项!我尝试了 NSRegularExpressionOptions 的所有选项,但没有
  • 我认为他的意思是你试图从这些 URL 中提取什么模式。
  • @PiJoules 不,我并不真正关心模式,因为这无关紧要。澄清一下,正则表达式是如何使用的,结果是什么?
  • 预期结果示例:regexr.com/39loc

标签: regex url swift nsregularexpression


【解决方案1】:

您的模式在字符串的末尾找不到“v=...”,因为(?=\\s|&) 期望 后面的空格或“&”字符。使用"v=(.+?)(?=$|&)",您应该会得到预期的结果。

【讨论】:

  • Martin,结果不符合预期:regexr.com/39lof并非所有情况都满足
  • @mhergon:似乎regexr.com 对待\s$ 与使用NSRegularExpression 的Swift 不同。我确实使用 Swift 代码对此进行了测试,它产生了预期的结果。
  • 哦,没错!对不起!我尝试使用 "v=(.+?)(?=$|&|\\s)" 并且有效,但您的解决方案 "v=(.+?)(?=$|&)" 也有效。谢谢!
猜你喜欢
  • 2015-04-13
  • 2014-06-01
  • 1970-01-01
  • 2013-12-05
  • 2012-11-17
相关资源
最近更新 更多