我有以下消息字符串。我想用新的字符串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
答案 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)
,这相当于此标志。
也可以通过嵌入式标志表达式(?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)或你需要的任何东西。