正则表达式替换包含特定事件的图像标记?

时间:2012-10-26 10:56:05

标签: java regex string

我有以下消息字符串。我想用新的字符串cid替换所有包含序列出现的图像标记,即custId = 1234:

 String message = "Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1234\"/>";

这是我通过一些正则表达式教程后尝试用cid代替所有图像标记出现的。 我没有得到如何适应     正则表达式中还有一个过滤器,即custId = 1234,因此只替换那些包含?custId = 1234

的图像标签
  message = message.replaceAll("\\<img.*?>", "cid:");

编辑: - 例如,如果 输入

  "Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1234\"/>";

输出应为
       “需要处理图片标签cid:”;

becoz输入包含img标签和?custId = 1234

输入

     "Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1235\"/>";

输出应为

     "Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1235\"/>";

becoz输入不包含?custId = 1234

3 个答案:

答案 0 :(得分:2)

试试这个: -

message = message.replaceAll("<img.*?\\?custId=1234.*?>", "cid:");

对于您的输入字符串: -

"Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?"
+ "custId=1234\"/>"

这会给你: -

"Need to process  image tag cid:"

也适用于输入: -

"Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1235\"/>"

输出: -

"Need to process  image tag <img src=\"http://danny.oz.au/p/56214815-tripod.jpg?custId=1235\"/>"

此外,我建议您查看Jsoup - Java HTML Parser,您应该使用它来解析HTML。正则表达式不是解析HTML的好主意。您只能解析有限范围的标签。

您也可以使用HTML Cleaner


更新: -

如果您希望dot (.)也匹配newline,则可以使用PAttern.DOTALL标记。另外,在String.replaceAll()的情况下,您可以在模式的开头添加(?s),这相当于此标志。

来自Pattern.DOTALL - JavaDoc: -

  

也可以通过嵌入式标志表达式(?s)启用Dotall模式。   (s是“单行”模式的助记符,就是这样   在Perl中调用。)

所以,您可以像这样修改您的模式: -

message = message.replaceAll("(?s)<img.*?\\?custId=1234.*?>", "cid:");

答案 1 :(得分:2)

您可以使用String Contains函数首先过滤那些有&#34; custid =&#34;的人。 e.g。

if (message.contains("custId=1234") {
    message = message.replaceAll("\\<img.*?>", "cid:");
}

答案 2 :(得分:0)

我想我已经找到了你Demo

"Need to process image tag.*\?custId=(\d+)"

这里你有一个正则表达式反向引用你的id,然后你可以打印需要委托cId:match.group(1)或你需要的任何东西。