swift2 在Swift中,如何编写正则表达式来删除字符串中的URL?

uyto3xhc  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(210)

我尝试删除字符串中的任何URL,有一个SO answer提供了一个使用PHP中的正则表达式的解决方案:

$regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@";
echo preg_replace($regex, ' ', $string);

我尝试直接在斯威夫特作为:

myStr.stringByReplacingOccurrencesOfString("@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@", withString: "", options: .RegularExpressionSearch)

但是它显示了一些误差Invalid escape sequence in literal
如何在Swift中正确操作?

p1iqtdky

p1iqtdky1#

如果你想从字符串中删除url而不使用正则表达式,你可以使用以下代码:

import Foundation

extension String {
    func removingUrls() -> String {
        guard let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) else {
            return self
        }
        return detector.stringByReplacingMatches(in: self,
                                                 options: [],
                                                 range: NSRange(location: 0, length: self.utf16.count),
                                                 withTemplate: "")
    }
}
htzpubme

htzpubme2#

首先,您需要转义转义符“",因此每个“\”都将变为“\"。其次,您缺少第四个参数,即“range:“

import Foundation

let myStr = "abc :@http://apple.com/@ xxx"
myStr.stringByReplacingOccurrencesOfString(
    "@(https?://([-\\w\\.]+[-\\w])+(:\\d+)?(/([\\w/_\\.#-]*(\\?\\S+)?[^\\.\\s])?)?)@", 
    withString: "", 
    options: .RegularExpressionSearch, 
    range: myStr.startIndex ..< myStr.endIndex
)

// result = "abc : xxx"

相关问题