[perl] string in regex gebruiken

Pagina: 1
Acties:

  • DaFearLess
  • Registratie: Juni 2001
  • Niet online
is het mogenlijk om in een regex een string te gebruiken

zoiets als
code:
1
if ($line =~ /^\s+$antwoord/) {

het bovenstaande werkt niet en ik kan er ook niks over vinden

weet iemand waar ik de info hier over kan vinden?

specs : http://specs.tweak.to/7435


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 10-08 15:15

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • tomato
  • Registratie: November 1999
  • Niet online
Denk wel even aan quotemeta of \Q$string\E in je regex als je 'vreemde' strings wilt gebruiken...

  • DaFearLess
  • Registratie: Juni 2001
  • Niet online
Ik zal het wat duidelijker uit proberen te leggen

in $line staat bijv.
code:
1
  6     vim-6.1-r7 (UPDATE)

of
code:
1
* 6     vim-6.1-r7 (UPDATE)

nu wil ik dat als er op de eerste regel een * staat dat hij weggehaal word.

nu heb ik het volgende geprobeert
code:
1
2
foreach my $line (@data2) {
   if ($line =~ /^\s+${antwoord}/) {


code:
1
2
foreach my $line (@data2) {
   if ($line =~ /^\s+$antwoord/) {


code:
1
2
foreach my $line (@data2) {
   if ($line =~ /^\s+\Q$antwoord\E/) {

maar hij werkt neit volgens hem staat overal een * voor

specs : http://specs.tweak.to/7435


  • tomato
  • Registratie: November 1999
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;

my $string = '*allemaal';
my $quoted = quotemeta '*allemaal';

while (<DATA>) {
    print if /\Q$string\E/;
    print if /$quoted/;
}

__DATA__
hoi mijn naam is martijn
en *allemaal leuks
hoi nog allemaal leuks
en allemaal *nog meer leuks
jaja *allemaal nog meer
en nog meer leuks

Geeft bij mij toch echt:
code:
1
2
3
4
5
% perl -w test.pl
en *allemaal leuks
en *allemaal leuks
jaja *allemaal nog meer
jaja *allemaal nog meer

... :?

  • DaFearLess
  • Registratie: Juni 2001
  • Niet online
ik komer nog steeds niet uit
maar ga morgen wel weer verder met frise moed

specs : http://specs.tweak.to/7435


  • DaFearLess
  • Registratie: Juni 2001
  • Niet online
ok mijn regex wert nu eindelijk na een middagje spelen.

alleen kwam het volgende stukje code problemen veroorzaken.

ik gebruik een sub
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub filereplace() {
      ($search,$replace) = @_ ;

      open(OUT, "/work/tmp");
      my @data = <OUT>;
      close(OUT) ;

      open(OUT, ">/work/tmp") ;
      foreach my $dataline (@data) {
            $dataline =~ s/$search/$replace/gi ;
            print OUT $dataline ;
      }
      close(OUT) ;
      show_info;
}

die roep ik aan met
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
      open(OUT, "/work/tmp");
      my @data2 = <OUT>;
      my $ster = "* $antwoord" ;
      my $gster = "  $antwoord" ;
      foreach (@data2) {
            if (/^$gster/) {
                print "$antwoord heeft geen *\n" ;
                &filereplace("$gster","$ster") ;
            }
            elsif (/^$ster/) {
                &filereplace("$ster","$gster") ;
                print "$antwoord heeft wel een *\n";
            }

nu gaat het zetten van een * goed alleen het weg halen gaat fout,
dan krijg ik deze error
code:
1
2
3
4
5
6
7
8
9
10
11
12
2 heeft geen *
  0     iptables-1.2.6a-r1 (UPDATE)
  1     shadow-4.0.2-r5 (UPDATE)
* 2     pam-login-3.6-r1 (NEW)
  3     util-linux-2.11o-r3 (UPDATE)
  4     libtool-1.4.1-r7 (UPDATE)
  5     gpm-1.19.6 (UPDATE)
  6     vim-6.1-r7 (UPDATE)
Witch Packages do you want to Upgrade or type quit to exit.
2
2 heeft wel een *
Quantifier follows nothing before HERE mark in regex m/* << HERE  2/ at ./x line 93.

kan iemand mij enige uitleg geven over deze error?

specs : http://specs.tweak.to/7435


  • TGEN
  • Registratie: Januari 2000
  • Laatst online: 14:54

TGEN

Hmmmx_

Misschien die * replacen met een spatie, en die spatie dan weer met een *?

btw, t is which, niet witch :)

Pixilated NetphreaX
Dronkenschap is Meesterschap
DragonFly

Pagina: 1