我有正则表达式:
str.replaceAll("(?!<img\ssrc=".*?">)([a-z])", "");
Run Code Online (Sandbox Code Playgroud)
...除了<img>此字符串中的标签正文外,应将所有字母踢出:
qwerty <img src="image.jpg"> zxc
Run Code Online (Sandbox Code Playgroud)
但我得到的< =".">不是<img src="image.jpg">
如何解决这个问题?
选项1:只有一个标签
如果您只有一个图片代码,请将其匹配:匹配是您的新字符串.
Pattern regex = Pattern.compile("<img[^>]+>");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
String ReplacedString = regexMatcher.group();
}
Run Code Online (Sandbox Code Playgroud)
选项2:多个标签
使用这个正则表达式:
<img[^>]+>|(.)
Run Code Online (Sandbox Code Playgroud)
这个问题是这个问题中解释为"正则表达式匹配模式,排除......"的经典案例.
交替的左侧 |匹配完成<img tags>.我们将忽略这些匹配.右侧匹配并捕获单个字符到组1,我们知道它们是正确的,因为它们与左侧的表达式不匹配.
该程序显示了如何使用正则表达式(请参阅在线演示底部的结果):
String subject = "qwerty <img src=\"image.jpg\"> zxc";
Pattern regex = Pattern.compile("<img[^>]+>|(.)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
System.out.println(replaced);
Run Code Online (Sandbox Code Playgroud)
参考