在字符串末尾为String中的特定字符串添加一个字符串

时间:2016-03-04 02:58:11

标签: ios regex swift

我有一个包含多个字符串的大字符串,如下所示:

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

如何解决我的问题?

3 个答案:

答案 0 :(得分:1)

您需要了解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将包含所有更新。

<强>更新

[\\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")

但这不适用于所有可能的网址。

答案 1 :(得分:1)

你应该把它称为

#!/bin/bash
for src in /Users/dave/biomkr/dat/*/rs/orig/vol_0000.nii
do
    srcdir=${src#/Users/dave/biomkr/dat/}
    srcdir=${srcdir%/rs/orig/vol_0000.nii}
    srcdir="/Users/dave/Documents/MIT_Har_stu/rsfmri/$srcdir/"
    mkdir -p "$srcdir"
    cp "$src" "$srcdir"
done

模板可以使用myString.stringByReplacingMatches("https:\\/\\/website\\.com\\/[\\w\\D]*.jpg", withMatch: "$0?w=100")) 来显示匹配的字符串。你不应该在那里重复匹配的正则表达式。

答案 2 :(得分:0)

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)
}