在字符串的结尾添加一个字符串特定字符串的String
里面我有一个包含几个字符串像下面这样的大串:在字符串的结尾添加一个字符串特定字符串的String
http://website.com/image.jpg
,我想补充?w=100
他们每个人。
到目前为止,我曾想过创建一个正则表达式,每次遇到该字符串时,它都会将其替换为相同的字符串,并将其添加到?w=100
中。
这里是String
的扩展,替换字符串:
public func stringByReplacingMatches(matchRegEx: String, withMatch: String) -> String {
do {
let regEx = try NSRegularExpression(pattern: matchRegEx, options: NSRegularExpressionOptions())
return regEx.stringByReplacingMatchesInString(self, options: NSMatchingOptions(), range: NSMakeRange(0, self.characters.count), withTemplate: withMatch)
} catch {
fatalError("Error in the regular expression: \"\(matchRegEx)\"")
}
}
这是我如何使用它:
myString.stringByReplacingMatches("https:\\/\\/website\\.com\\/[\\w\\D]*.jpg", withMatch: "https:\\/\\/website\\.com\\/[\\w\\D]*.jpg?w=100"))
问题,这是我替换字符串后得到:
https://website.com/[wD]*.jpg?w=100
我该如何解决我的问题?
您需要了解capture groups:
myString.stringByReplacingMatches("(https:\\/\\/website\\.com\\/[\\w\\D]*.jpg)", withMatch: "$1?w=100")
哦,不要忘记保存返回值
let fixedString = myString.stringByReplacingMatches("(https:\\/\\/website\\.com\\/[\\w\\D]*.jpg)", withMatch: "$1?w=100")
myString
不会改变,但是会fixedString
有所有的更新。
UPDATE
[\\w\\D]*
任何字符匹配。你需要制定一个更具体的正则表达式。
对于输入"https://website.com/x.jpg" "https://website.com/x.jpg"
,正则表达式\w
有效。
var myString = "\"https://website.com/x.jpg\" \"https://website.com/x.jpg\""
myString = myString.stringByReplacingMatches("(https:\\/\\/website\\.com\\/\\w*.jpg)", withMatch: "$1?w=100")
但是,这不适用于每个可能的URL。
do {
let regex = try NSRegularExpression(pattern: "http:\\/\\/[a-z]*.[a-z]*\\/[a-z]*.[a-z]*", options: .CaseInsensitive)
var newString = regex.stringByReplacingMatchesInString(a, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, a.characters.count), withTemplate: "$0?w=100")
print(newString)
}
你应该把它作为
myString.stringByReplacingMatches("https:\\/\\/website\\.com\\/[\\w\\D]*.jpg", withMatch: "$0?w=100"))
模板可以使用$0
显示匹配的字符串。你不应该在那里重复匹配正则表达式。
它的工作感谢,但只为最后一次发生。我怎样才能使它适用于我的大串中的所有事件?我想正则表达式很好,这可能是函数。 – Nico
您的匹配表达过于宽泛。试试'myString.stringByReplacingMatches(“http:\\/\\/[a-zA-Z0-9] *。[a-zA-Z0-9] * \\/[a-zA-Z0-9] *。 [a-zA-Z0-9] *“,withMatch:”$ 0?w = 100“))'这可能适用于某些URL,但我会寻找更好的正则表达式来检测所有不同类型的URL。对于您的原始问题,模板更改是正确的解决方案。大字符串中URL的正确匹配完全是一个不同的问题。 – wottle
是的,我后来意识到了......我最终使用了这个正则表达式:[\\ w - $ +()*!'] *。可能需要获得更好的一个。谢谢 – Nico
为什么你需要一个捕获组,如果你可以使用'$ 0'来插入匹配的字符串? – paulvs
@paulvs我更喜欢明确。 “$ 0”可行,但不够灵活。 –
它的工作表示感谢,但仅限于最后一次发生。我怎样才能使它适用于我的大串中的所有事件?我想正则表达式很好,这可能是函数。 – Nico