0

我有以下消息字符串。我想用新的字符串 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:”;

因为输入包含 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\"/>";

因为输入不包含 ?custId=1234 两者

4

3 回答 3

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:-

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

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

message = message.replaceAll("(?s)<img.*?\\?custId=1234.*?>", "cid:");
于 2012-10-26T11:00:21.123 回答
2

您可以使用 ths String Contains 函数首先过滤具有“custid =”的那些。例如

if (message.contains("custId=1234") {
    message = message.replaceAll("\\<img.*?>", "cid:");
}
于 2012-10-26T11:01:54.063 回答
0

我想我有你Demo

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

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

于 2012-10-26T11:15:22.240 回答