如何忽略字符串中的正则表达式结果

时间:2016-04-13 07:21:31

标签: regex

我想在字符串中找到匹配的正则表达式然后忽略这些匹配,然后使用字符串的剩余部分。例如我的模式是:

alt=('|").*('|")

我的字符串是:

<div class='divClass'><img src='image.png' alt="abcdef"></div>

我希望最终得到这个字符串:

<div class='divClass'><img src='image.png'></div>

注意:alt属性的值会动态更改。

2 个答案:

答案 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.
  1. [^>]*?匹配最短的字符串,该字符串不包含任何将终止img标记的>个字符。
  2. (['\"])匹配单引号或双引号。双引号被转义,因此它可以在Java中用作String文字分隔符。它包含在一个组中,以便我们以后可以匹配确切的结束报价。
  3. \2匹配先前匹配的引号字符,该字符正确终止字符串属性值。