如何写这个正则表达式代码片段吧?

时间:2013-01-31 22:40:50

标签: ios objective-c regex

我正在尝试使用UIWebView显示带有图像的文本。 该文本内部有一些链接,例如:

  

“我曾经养过一条鱼 http://mysite.com/images/fish.jpg 。   我还拥有一只小狗和一只公鸡 http://mysite.com/images/dog.jpg

会导致:

  

我曾经养过一条鱼

----------------------------------
|                                 |
|Fish Image From                  |
|http://mysite.com/images/fish.jpg|
|                                 |
|                                 |
----------------------------------
  

我还拥有一只小狗和一只公鸡

----------------------------------
|                                |
|dog Image From                  |
|http://mysite.com/images/dog.jpg|
|                                |
|                                |
----------------------------------
--------------------------------------
|                                    |
|rooster Image From                  |
|http://mysite.com/images/rooster.jpg|
|                                    |
|                                    |
--------------------------------------



    NSMutableString *mutableString = [[NSMutableString alloc] initWithFormat:@"<html><head></head><body>%@</body>",string];

    NSString *pattern = @"http://.+\\.(?:jpg|jpeg|png|gif|bmp)";
    NSString *replacement = @"<br /><img style=\"width:100%;height:auto;\" src=\"$1\"/><br />";
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern           
                          options:0 error:NULL];
    [regex replaceMatchesInString:mutableString
                          options:0
                          range:NSMakeRange(0, mutableString.length)
                          withTemplate:replacement];

但是当我检查结果时,图片会显示:<br /><img style="width:100%;height:auto;" src=""/><br />并且链接已消失。

图片必须是:

文字...
<br /><img style="width:100%;height:auto;" src="http://mysite.com/images/fish.jpg"/><br />

文字......

<br /><img style="width:100%;height:auto;" src="http://mysite.com/images/dog.jpg"/><br />

<br /><img style="width:100%;height:auto;" src="http://mysite.com/images/rooster.jpg"/><br />

1 个答案:

答案 0 :(得分:1)

我认为$1要正常工作,您需要将匹配的模式放在一个组中,即在()内。如何使用以下模式:

(http://.+\\.(?:jpg|jpeg|png|gif|bmp))

同样从.+部分的模式我吃了整个字符串。为了减少贪婪,可以使用.+?或更正确的\w.*?替换它,以保持+在原始模式中的效果。