Thread Ersatz für URI::Find (114 answers)
Opened by bianca at 2014-05-05 11:32

GwenDragon
 2014-06-29 10:23
#176206 #176206
User since
2005-01-17
14563 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict; 
use warnings;
use lib 'lib';
use URI::Find::Schemeless;

my $text = <<TXT;
Hau doch mal den Gockel auf www.google.com, Oder nutze "google.de".
Oder Google.com!
TXT

my $finder = URI::Find::Schemeless->new(sub {
    my($uri, $orig_uri) = @_;
    return "[$orig_uri]<$uri>";
});
$finder->find(\$text);
print $text;
ergibt
Code: (dl )
1
2
Hau doch mal den Gockel auf [www.google.com]<http://www.google.com/>, Oder nutze "google.de".
Oder Google.com!


Sieht so aus als ob das ! ond die " nicht als Trenner erkannt wird.
mal schauen wie das Modul definiert, was ein Ende einer URI ist.


//EDIT:
neuere TLD
Um solche mit mehr als zwei Zeichen (weiß nicht wie lang die maximal sein dürfen) zu erkennen, muss in Schemless.pm in der Methode top_level_domain_re folgendes
Code (perl): (dl )
    return qr/(?:[a-z]{2}|$plain)/i;

ersetzt werden durch
Code (perl): (dl )
    return qr/(?:[a-z]{2,20}|$plain)/i;


URI in Anführungszeichen
Um URI in " zu erkennen muss in Methode schemeless_uri_re
Code: (dl )
              (?: ^ | (?<=[\s<>()\{\}\[\]]) )

druch
Code: (dl )
              (?: ^ | (?<=["\s<>()\{\}\[\]]) )

ersetzt werden.




//EDIT2:
Es muss eben definiert werden, welche Trennzeichen verwendet werden.
Das Modul hat eben auch nur eine bestimmte Heuristik, was als Trenner oder URI-Ende dient.
Last edited: 2014-06-29 11:05:59 +0200 (CEST)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Ersatz für URI::Find