gpt4 book ai didi

regex - 在 swift 2.2 中使用正则表达式从字符串中提取确切链接

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:16 24 4
gpt4 key购买 nike


我只想提取以下代码后的网站链接:

import UIKit
import Foundation

func regMatchGroup(regex: String, text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
let results = regex.matchesInString(text,
options: [], range: NSMakeRange(0, nsString.length))
var internalString = [String]()
for result in results {

for var i = 0; i < result.numberOfRanges; ++i{
internalString.append(nsString.substringWithRange(result.rangeAtIndex(i)))
}
}
return internalString
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
// USAGE:
let textsearch = "mohamed amine ammach <img alt='http://fb.com' /> hhhhhhhhhhh <img alt='http://google.com' />"
let matches = regMatchGroup("alt='(.*?)'", text: textsearch)
if (matches.count > 0) // If we have matches....
{
for (var i=0;i < matches.count;i++) {

print(matches[i])

}
}

Playground 打印以下内容:

alt='http://fb.com'
http://fb.com
alt='http://google.com'
http://google.com

但我只是想得到:
http://fb.com
http://google.com
这里有人可以帮我解决这个问题吗?,我将不胜感激

最佳答案

您需要知道 NSTextCheckingResult.rangeAtIndex(_:) 返回与索引为 0 的整个正则表达式匹配的范围。

在你的情况下:

rangeAtIndex(0) -> alt='(.*?)' 范围 -> alt='http://fb.com'

rangeAtIndex(1) -> (.*?) 的范围 -> http://fb.com

因此,在生成匹配字符串时需要跳过索引值0。

尝试将最内层的 for 语句更改为:

            for i in 1 ..< result.numberOfRanges { //start index from 1
internalString.append(nsString.substringWithRange(result.rangeAtIndex(i)))
}

(您还需要知道一件事,C 风格的 for 语句已被弃用。)

关于regex - 在 swift 2.2 中使用正则表达式从字符串中提取确切链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com