客观c正则表达式

时间:2012-05-09 09:01:45

标签: objective-c regex

我在读取字符串的图像路径时遇到问题,例如 - >背景图像:网址(/assets/test.jpg)

我想把括号内的字符串放在括号内。

以下是我使用的代码:

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)

2 个答案:

答案 0 :(得分: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,因为您需要转义\,因此它将被视为真正的反斜杠。

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

  

有三种不同的职位符合词边界:

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

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

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

我希望这会澄清一点。

答案 1 :(得分:0)

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