dize

2016-04-13 22 views
0

bir regex sonucunu yok sayma Bir dizede eşleşen regex bulmak ve sonra bu eşleşmeleri yok saymak, daha sonra dizenin kalan bölümleri ile çalışmak. Örneğin benim kalıptır:dize

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

ve benim dizesidir:

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

ben sonda gelen bu dizeyi almak istiyorum:

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

not: Bu niteliğin değeri dinamik olarak değişir.

+0

hangi lezzet? JS? PHP? –

+0

HTML kodlarını sunucuda java web ile ayrıştırmak istiyorum. –

+0

Java web ...? Tabii JS değil? –

cevap

1

php gerekiyorsa: İlk ve üçüncü sonuçta istediğiniz dizeyi (alt="..." parçası ama her şeyi) dönecektir

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

:

$re = "/\\s*alt=([\"']).*?\\1/"; 
$str = "<div class='divClass'><img src='image.png' alt=\"abcdef\"></div>"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str, 1); 
+0

Regex ile dizgenin kalanını bulmanın bir yolu var mı? Bunun yerine PHP kodu yazmayı yerine getiren bir regex bulmak demek? veya bu deseni nasıl reddedebilirim? –

+0

Üzgünüz, ihtiyacım olanı anlamadım @AtefehRashidi –

+0

Tamam. Sorun değil. Teşekkürler. –

0

Ben Bu normal ifadenin desen kullanmak istiyorsunuz Grup, sadece onları birleştirmek zorundasınız.

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

Not Eğer Dize içine alın kullanın regex içine tırnak tipini kaçmak gerekir:

Bu

kolayca yedek dizede String'in replaceAll(pattern, replacement) yöntemi ve grup tutucuları "$n" kullanılarak yapılır Java kodunuzda değişmez - ya da sadece ikisini birden.


Desen açıklama:

Group 1 part to remove Group 3 
|----------||---------------||-------| 
(<img[^>]*?) alt=(['\"]).*?\2([^>]*?>) 
    \____/  \_____/ \/ \____/ 
     1.   2.  3. 1. 
  1. [^>]*? img etiketi sonlandırmak herhangi bir > karakterleri içermeyen en kısa dizeyle eşleşir.
  2. (['\"]), tek veya çift tırnak işareti ile eşleşir. Java'da String literal sınırlayıcı olarak kullanılabilmesi için çifte alıntı kaçtı. Bir gruba eklenir, böylece daha sonra kesin kapanış teklifini eşleştirebiliriz.
  3. \2, dize öznitelik değerini doğru olarak sonlandıran önceden eşleştirilmiş alıntı karakteriyle eşleşir.
+1

FYI: '\ 2' içinde bir' [^ \ 2] 'bir geri dönüş dizisi olarak değil, bir geri tepme olarak değerlendirilir. –

+0

[Yapmayacağım] (https://regex101.com/r/pR5iR4/1) –

+0

@Thomas @ Wiktor Desenimi düzelttim. İpucu için teşekkürler. –