2010-12-21 13 views
5

+ Bir karakterin ilk örneğinde nasıl durulur + perl'deki normal ifadelerle son değil mi?

'''<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>''' 

ile birlikte:

='''<font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font>'''= 

Şu anki kodum:

$html =~ s/\n(.+)<font size=\".+?\">(.+)<\/font>(.+)\n/\n=$1$2$3=\n/gm 

Ancak sonuç olarak bunun sonucu şudur:

=''' SUMMER/WINTER CONFIGURATION FILES</font>'''= 

Şimdi ne olduğunu görebiliyorum, <font size ="..... all the way up to the end of the <font colour blue"> ile eşleşiyor, istediğim gibi değil, 'in ilk örneğinde durmasını istiyorum " son değil, düşündüğüm şey budur?" Ancak, her zaman aynı sonuca sahip olan +. +?. * ve. *?

Yanlış yaptığım herhangi bir fikrim var mı?

+5

Sen ayrıştırmak olamaz [X] HTML regex ile: http://stackoverflow.com/question s/1732348/regex-match-open-tags-except-xhtml-kendi içinde bulunan etiketler/1732454 # 1732454 –

cevap

4

+0

Daha da iyisi , teşekkür ederim! – rolls

8

.+?her yerde yazarak her maçın açgözlü olmasını sağlayın. Ayrıca, HTML'yi ayrıştırmak için normal ifadeleri kullanmaktan kaçınmayı da deneyin. Mümkünse bir HTML ayrıştırıcısı kullanın. Mark dediği gibi, sadece bunun için CPAN kullanmak

+0

Bunu zaten benim yorumuma göre denedim ve işe yaramadı. Önceden HTML ayrıştırıcıları kullanmadım, herhangi bir öneriniz var mı? – rolls

7

Sen ... .+ yerine, "bir " değil bir şey eşleşmesi" "Bir şey eşleştirmek" nin [^"]+ (için değişebilir.

#!/usr/bin/env perl 

use strict; use warnings; 
use HTML::TreeBuilder; 

my $s = q{<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>}; 

my $tree = HTML::TreeBuilder->new; 
$tree->parse($s); 
print $tree->find_by_attribute(color => 'blue')->as_HTML; 

# => <font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font> 

Ancak bu, kendi özel durumunuz için çalışır:

#!/usr/bin/env perl 

use strict; use warnings; 

my $s = q{<font size="3"><font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font></font>}; 

print $s =~ m{ 
       < .+? > 
       (.+)? 
       </.+? >     
      }mx; 

# => <font color="blue"> SUMMER/WINTER CONFIGURATION FILES</font> 
+0

Bunu denedim ve hiçbir şeyle eşleşmiyor, burada kullandığım şey: $ html = ~ s/\ n (. +?) (. +) <\/font> (. +?) \ n/\ n === $ 1 $ 2 $ 3 === \ n/m; – rolls

+0

Hmm, bu örnekte yayınladığım dizede çalıştı, ancak bu örnekte hiç uyuşmuyor, fikirleri: '' ' YAZ/KIŞ KONFİGÜRASYON DOSYALARI' '' – rolls

İlgili konular