1

我在读取字符串的图像路径时遇到问题 -> background-image:url(/assets/test.jpg)

我想让括号内的字符串没有括号self。

这是我使用的代码:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\bbackground-image:url\(.*\)\\b" options:NSRegularExpressionCaseInsensitive error:nil];

        thumbnail = [regex stringByReplacingMatchesInString:thumbnail options:0 range:NSMakeRange(0, [thumbnail length]) withTemplate:@"$1"];

我得到的是(/assets/test.jpg)

4

2 回答 2

3

使用以下模式来获得预期的结果:

background-image:url\\((.*)\\)

应用于您的代码:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"background-image:url\\((.*)\\)" options:NSRegularExpressionCaseInsensitive error:nil];

使用它,结果将是“/assets/test.jpg”,就像你想要的那样。

你的代码应该给你一个关于“\(”的未知转义序列的警告。你必须使用“\\(”来转义一个“(”。还要去掉开头和结尾的“\\b”你的模式。

但请注意,这种模式仅在您的字符串仅包含“background-image:url(somevaluehere)”时才有效

编辑:

\\b 是什么意思?

\\b 是单词边界,通常表示为\b。在 NSString 中,您需要编写 \\b 因为您需要转义 \,因此它将被视为真正的反斜杠。

这里有一些关于单词边界匹配的信息:

有资格作为单词边界的三个不同位置:

  • 在字符串的第一个字符之前,如果第一个字符是单词字符。
  • 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
  • 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。

简单地说:\b 允许您使用 \bword\b 形式的正则表达式执行“仅整个单词”搜索。“单词字符”是可用于构成单词的字符。所有不是“单词字符”的字符都是“非单词字符”。

取自http://www.regular-expressions.info/wordboundaries.html

我希望这能澄清一点。

于 2012-05-09T09:20:24.783 回答
0

我相信您应该将您的正则表达式更改为\\bbackground-image:url\((.*)\)\\b. 我在 .* 周围添加了 () 来捕捉你想要的匹配。

于 2012-05-09T09:20:36.457 回答