2016-04-13 81 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我修正了我的模式。感謝提示。 –

相關問題