Schrift
[thread]8294[/thread]

Regulärer Ausdruck



<< >> 8 Einträge, 1 Seite
Gast Gast
 2006-09-05 14:08
#69511 #69511
Hi,

Ich komme bei folgendem regulären Ausdruck nicht weiter:

s?\\?/?g

Ich habe folgende Vermutung:
Der String beginnt mit ein oder kein s. Danach folgt ein oder
kein Backslash. Danach kommt ein oder kein / und schließlich ein g.

Stimmt das so?
renee
 2006-09-05 14:32
#69512 #69512
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein. Hier werden in einem String alle Backslashes in Slashes umgewandelt.

Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use strict;
use warnings;

my $string = 'C:\Pfad\Test\Datei.txt';
$string =~ s?\\?/?g;

print $string;


Ausgabe:
Code: (dl )
1
2
116> perl regex.pl  
C:/Pfad/Test/Datei.txt


Guter Lesestoff:
perlre
perlretut
perlrequick

mehr zu s/// (bzw. s???) findest Du unter perlop
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/
GwenDragon
 2006-09-05 15:54
#69513 #69513
User since
2005-01-17
14532 Artikel
Admin1
[Homepage]
user image
[quote=Guest,05.09.2006, 12:08]s?\\?/?g[/quote]
Das ? wird hier nur als Trenner im RegEx bei s/// verwendet.
Das irriertert natürlich sehr.

Das könnte auch so geschrieben werden:
s|\\|/|g
die Drachin, Gwendolyn


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

Taulmarill
 2006-09-05 16:11
#69514 #69514
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
oder so s/\\/\//g; :-)
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
sid burn
 2006-09-05 17:13
#69515 #69515
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Wenn man als Trenner ein Fragezeichen nimmt, kommt noch hinzu das die Regex nur ein einziges mal Matcht, und danach matcht diese nicht mehr.

Wenn es also geht sollte man das fragezeichen als normalen Trenner meiden. Innerhalb von Schleifen kann es nicht das sein, was man unbedingt möchte.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Taulmarill
 2006-09-05 19:28
#69516 #69516
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
falsch. wenn das hier nur ein match währe, dann hättest du recht. da es sich aber um eine substitution handelt, verhält sich das regex "normal", auch bei fragezeichen als trenner.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
sid burn
 2006-09-05 20:18
#69517 #69517
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Taulmarill,05.Sep..2006, 17:28]falsch. wenn das hier nur ein match währe, dann hättest du recht. da es sich aber um eine substitution handelt, verhält sich das regex "normal", auch bei fragezeichen als trenner.[/quote]
Stimmt.

Vielleicht sollte man es trotzdem nicht Nutzen um Verwechslung zu vermeiden. *g*
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
GwenDragon
 2006-09-05 22:01
#69518 #69518
User since
2005-01-17
14532 Artikel
Admin1
[Homepage]
user image
Wenn Anfänger verwirrt werden sollen, kann es ganz nützlich sein. Auch wenn es kein Obfuscating ist, ein Confusing ist es ;)
die Drachin, Gwendolyn


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

<< >> 8 Einträge, 1 Seite



View all threads created 2006-09-05 14:08.