2016-04-13 78 views
0

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

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

和我的字符串是:

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

我想finaly得到这个字符串:

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

注:alt属性的值是动态变化的。

+0

哪种味道? JS? PHP? –

+0

我想在服务器中通过java web解析HTML代码。 –

+0

Java web ...?当然,这不是JS? –

回答

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); 
+0

有没有什么方法可以找到正则表达式的其余部分?我的意思是找到这样做的正则表达式而不是编写PHP代码?或如何否定这种模式? –

+0

对不起,我不明白你的需要@AtefehRashidi –

+0

好的。没问题。谢谢。 –

0

我会用这个正则表达式:

(<img[^>]*?) alt=(['"]).*?\2([^>]*?>) 

它将在第一和第三结果返回你想要的字符串(一切,但alt="..."部分)组,你只需要连接它们。

str = str.replaceAll("(<img[^>]*?) alt=([\'\"]).*?\2([^>]*?>)", "$1$3"); 

请注意,你需要逃脱正则表达式引号内您可以使用它围住字符串类型:

这是很容易使用String的replaceAll(pattern, replacement)方法和组占位符"$n"替换字符串做直接写在你的Java代码中 - 或者两者兼而有之。


模式说明:

Group 1 part to remove Group 3 
|----------||---------------||-------| 
(<img[^>]*?) alt=(['\"]).*?\2([^>]*?>) 
    \____/  \_____/ \/ \____/ 
     1.   2.  3. 1. 
  1. [^>]*?不包含任何>字符将终止img标签最短的字符串相匹配。
  2. (['\"])匹配单引号或双引号。双引号被转义,因此它可以在Java中用作字符串字面分隔符。它被包含在一个组中,以便我们可以在稍后匹配确切的结束报价。
  3. \2与正确终止字符串属性值的以前匹配的引号字符匹配。
+1

仅供参考:'[^ \ 2]'内的'\ 2'被视为转义序列,而不是反向引用。 –

+0

[我不会](https://regex101.com/r/pR5iR4/1) –

+0

@Thomas @ Wiktor我修正了我的模式。感谢提示。 –

相关问题