Bir Alt-desen hariç Anything Maç

1 Cevap php

Ben bu (geçersiz inanıyorum) düzenli ifade yapmaya çalıştığı şey başarmak istiyorum:

<p><a>([^(<\/a>)]+?)<\/a></p>uniquestring

Esasen bir kapanış çapa etiketi dışında her şey maç. `Uniquestring 'çok iyi başka uzak kapanış etiketi çapa sonra olabilir, çünkü basit olmayan açgözlü burada yardımcı olmaz:

<p><a>text I don't <tag>want</tag> to match</a></p>random 
data<p><a>text I do <tag>want to</tag> match</a></p>uniquestring more
matches <p><a>of <tag>text I do</tag> want to match</a></p>uniquestring 

Yani çapa etiketleri arasında daha etiketi var. Ve ben verileri eşleştirmek istiyorsanız uniquestring belirlemek için varlığını kullanıyorum. Yani basit olmayan açgözlü ben istiyorum verilerin sonuna istemiyorum verilerin baştan her şeyi eşleşen biter.

Ben düzenli ifadeler (ya da en azından benim bilgi) çözmede iyi değildir sorunlara yakın kenar biliyorum. Ben sadece bir HTML / XML parser de veri üzerinden olabilir, ama sadece tek bir basit (imsi) aramasıdır.

Ben sadece eksik bunun için bazı kolay yolu var mı?

1 Cevap

Negatif görünüm arkasında sıfır genişlik arıyoruz:

<p><a>((?<!<\/a>).)+<\/a><\/p>uniquestring

Testi:

(zyx:~) % echo $T
<p><a>text I don't <tag>want</tag> to match</a></p>random  data<p><a>text I do <tag>want to</tag> match</a></p>uniquestring more matches <p><a>of <tag>text I do</tag> want to match</a></p>uniquestring
(zyx:~) % echo $T | grep -oP '<p><a>((?<!<\/a>).)+<\/a><\/p>uniquestring'
<p><a>text I do <tag>want to</tag> match</a></p>uniquestring
<p><a>of <tag>text I do</tag> want to match</a></p>uniquestring