我想在字符串中找到匹配的正则表达式然后忽略这些匹配,然后使用字符串的剩余部分。例如我的模式是:
alt=('|").*('|")
我的字符串是:
<div class='divClass'><img src='image.png' alt="abcdef"></div>
我希望最终得到这个字符串:
<div class='divClass'><img src='image.png'></div>
注意:alt属性的值会动态更改。
答案 0 :(得分:1)
如果你需要php:
$re = "/\\s*alt=([\"']).*?\\1/";
$str = "<div class='divClass'><img src='image.png' alt=\"abcdef\"></div>";
$subst = "";
$result = preg_replace($re, $subst, $str, 1);
答案 1 :(得分:0)
我会使用这个正则表达式模式:
(<img[^>]*?) alt=(['"]).*?\2([^>]*?>)
它会在第一个和第三个结果组中返回你想要的字符串(除了alt="..."
部分之外的所有字符串),你只需要连接它们。
使用字符串的replaceAll(pattern, replacement)
方法和替换字符串中的组占位符"$n"
可以轻松完成此操作:
str = str.replaceAll("(<img[^>]*?) alt=([\'\"]).*?\2([^>]*?>)", "$1$3");
请注意,您需要转义正则表达式中用于将字符串文字括在Java代码中的正则表达式中的引号类型 - 或者只是两者。
模式说明:
Group 1 part to remove Group 3
|----------||---------------||-------|
(<img[^>]*?) alt=(['\"]).*?\2([^>]*?>)
\____/ \_____/ \/ \____/
1. 2. 3. 1.
[^>]*?
匹配最短的字符串,该字符串不包含任何将终止img标记的>
个字符。(['\"])
匹配单引号或双引号。双引号被转义,因此它可以在Java中用作String文字分隔符。它包含在一个组中,以便我们以后可以匹配确切的结束报价。\2
匹配先前匹配的引号字符,该字符正确终止字符串属性值。