【问题标题】:How to write this regex code snippet right?如何正确编写此正则表达式代码片段?
【发布时间】:2013-02-01 06:47:05
【问题描述】:

我正在尝试让 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];

但是当我检查结果时,图像得到了这个:&lt;br /&gt;&lt;img style="width:100%;height:auto;" src=""/&gt;&lt;br /&gt; 并且链接消失了。

图像必须在哪里:

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

文字...

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

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

【问题讨论】:

    标签: ios objective-c regex


    【解决方案1】:

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

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

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

    【讨论】:

    • 它适用于: (http://.*(?:jpg|jpeg|png|gif|bmp)) ,我应该这样使用它吗?
    • @Ted 嗯,这非常依赖于引擎。但是,如果您发现它以后无法与其他编程语言一起使用,请考虑使用 .*? 而不是单独使用 .*
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多