Schrift
[thread]5787[/thread]

Regulärer Ausdruck: Problem am Begin

Leser: 1


<< >> 8 Einträge, 1 Seite
Optalamia
 2003-10-01 18:43
#59585 #59585
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

komme mit einem Regex nicht weiter:
Der soll Zeichenketten beginnend mit "www." (URI's) finden und ersetzen.
Klappt auch, allerdings nicht dann, wenn diese Zeichenkette ganz am Anfang steht.
Ich weiß, es liegt am "(\s)", aber das soll vergindern, daß z.B. "xxxwww." ersetzt wird.
Habe es auch mit dem Anker \b versucht, geht aber auch nicht.

Hat jemand Ideen?

Code: (dl )
1
2
3
4
5
6
7
# alte Variante

$txt =~ s%(\s)(www\.[^\s<]*)%$1<a href="http://$2" target="_blank">$2</a>%sg;

# andere (nicht funktionierende) Variante

$txt =~ s%\w(www\.[^\s<]*)%<a href="http://$1" target="_blank">$1</a>%sg;
renee
 2003-10-01 19:10
#59586 #59586
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
probier's mal mit
Code: (dl )
$txt =~ s%$(\s)?(www\.[^\s<]*)%$1<a href="http://$2" target="_blank"">$2</a>%sg;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
steffenw
 2003-10-01 19:12
#59587 #59587
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du mußt einen Anker am Anfang setzen entweder den ^ oder einen für den Wortanfang \b

/^www\./ erkennt www. usw.

/\bwww\,/ erkennt www. irgendwo zwischendrin aber vor www dürfen nur Nichtwortzeichen stehen.
$SIG{USER} = sub {love 'Perl' or die};
steffenw
 2003-10-01 19:15
#59588 #59588
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=renee,01.10.2003, 17:10]probier's mal mit
Code: (dl )
$txt =~ s%$(\s)?(www\.[^\s<]*)%$1<a href="http://$2" target="_blank"">$2</a>%sg;
[/quote]
also $ am Anfang ist irgendwie der falsche Anker und zu einer Variablen paßt es auch nicht

(\s)? ist eigentlich nichts also paßt auch xxxwww.
$SIG{USER} = sub {love 'Perl' or die};
renee
 2003-10-01 19:28
#59589 #59589
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Sorry, hast recht...
Meinte eigentlich das ^ !
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Optalamia
 2003-10-02 05:05
#59590 #59590
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ach ja,
statt \s wollte ich ja auch \b benutzen (Wortgrenze). Deshalb ging es nicht.
Aber auch mit \b ist es nicht so wie ich will, da 2 weitere Regex Adressen mit http:/// und Mail-Links ersetzen.
\b greift dann noch mal nach http:/// und macht Müll.
Aber egal, habe eine andere Lösung gefunden:
Zu den bisherigen Regex (die immer, bloß nicht am Text-Anfang ersetzen können) habe ich 2 weitere mit ^ hinzugefügt,
die nur solche am Anfang ersetzen.

Mein alter Professor würde jetzt vielleicht sagen, das sei die Methode, von hinten durch die Brust ins Schienenbein zu stechen (-;

Trotzdem Danke für die Antworten (-:

Gruß Optalamia
steffenw
 2003-10-02 11:20
#59591 #59591
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, nimm "oder" und prüfe erst das spezielle, und dann das weniger spezielle.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
m%
 (   # speichernde Klammer
   (?:   # gruppierende Klammer für "oder"
     \bhttp://   # das spezielle
     |
     \bwww\.   # das weniger spezielle
   )
   [^\s<]*   # was sonst noch gespeichert werden soll
 )
%x
\n\n

<!--EDIT|steffenw|1065079581-->
$SIG{USER} = sub {love 'Perl' or die};
format_c
 2003-10-02 12:17
#59592 #59592
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ähm perldoc URI ?

Gruß Alex
<< >> 8 Einträge, 1 Seite



View all threads created 2003-10-01 18:43.