Toon posts:

[Perl]RegEx + Willekeurige dubbele tekens vinden

Pagina: 1
Acties:
  • 169 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben op zoek naar een reguliere expressie die twee of meer dezelfde tekens achter elkaar in een variabele herkent.

Ik denk dat de vraag het best duidelijk wordt met behulp van een voorbeeldje. :)
code:
1
2
3
$var = "abbbc" # Hier moet ie een true retourneren
$var = "abcbd" # Hier moet ie een false retourneren
$var = "122g"  # Hier moet ie een true retourneren

Nu weet ik wel van het bestaan van bijvoorbeeld:
$count = ($var =~ tr/$teken//);

Maar het punt is dat ik niet weet hoe ik een regex moet schrijven waarin $teken elk willekeurig karakter mag zijn, als het zich maar herhaalt!
Vervolgens zou ik uiteraard aan de $count wel kunnen zien hoevaak dit karakter voorkwam en hier m'n criteria voor schrijven wat er vervolgens mee gedaan moet worden.
Maargoed, da's voor latere zorg. :)

  • tjerkw
  • Registratie: September 2004
  • Laatst online: 04-04-2024
ik weet het niet zeker, maar ik denk dat je dit niet kunt uitdrukken met een reguliere taal, omdat je dingen gaat tellen die niet vast staan. Ik weet niet of RegEx echt een reguliere taal is , dus ik kan er niet veel over zeggen.

Maar je zou toch ook een functie kunnen maken die je het antwoord geeft?

Tjerk W


Verwijderd

Gaat je denk ik niet lukken in een regex, maar 't is toch vrij simpel om door die string te itereren en True te returnen wanneer een karakter gelijk is aan de vorige?

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Mmm sorry dat ik het zeg, maar dit is echt een redelijke newbie vraag... ben te lui om te kijken hoe snel ik het antwoord zelf kan vinden :) dus zal het je maar geven.

code:
1
2
my $var = "abbc";
(my $isdouble) = $var =~ m/(.)\1/;


Dit zou moeten werken, ben te lui :) om het te testen.
Als het werkt zoals ik verwacht, staat in $isdouble ook gelijk (eenmalig!) het teken dat 2x achter elkaar voorkomt.

edit:
Heb het toch maar ff getest, en idd het werkt zoals ik had verwacht

[ Voor 11% gewijzigd door muba op 10-03-2005 22:02 ]

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

Sh*t!
Die regexes zijn toch wel verdraaide krachtig!
't Enige nadeel is dat ze net zo onleesbaar zijn als Perl... :+

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
Kan wel :)
code:
1
2
3
if (/(.)\1/) {
  print "'$1' is the first doubled character\n";
}


Edit:Crap... ruimshoots te laat :) Overigens rechtstreeks uit de manual op Perl.com. Perl regexpen zijn idd superkrachtig, maar ook wat lastig te lezen soms. Je kan op deze manier ook makkelijk meerdere dubbele chars zoeken: /(.)\1{3}/ zoekt 4 dezelfde chars etc.

[ Voor 71% gewijzigd door Morrar op 10-03-2005 22:12 ]


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Verwijderd schreef op donderdag 10 maart 2005 @ 22:07:
Sh*t!
Die regexes zijn toch wel verdraaide krachtig!
't Enige nadeel is dat ze net zo onleesbaar zijn als Perl... :+
Mja, het vergt enige oefening... En als de progger een beetje handig schrijft scheelt ook wel.

code:
1
select(select(FH, $|++))
leest wat moeilijker dan

code:
1
2
3
4
use English;
my $old_filehandle = select FH;
$AUTO_FLUSH = 1;                   # zo heet $| volgens mij in de English module
select $old_filehandle;


edit:
Moet ik natuurlijk geen puntkomma's vergeten!

[ Voor 7% gewijzigd door muba op 10-03-2005 22:11 ]

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
Dat Perl lastig leest komt vooral door sommige wat interessante constructies in Perl. Het aanpassen van de notatie van variabelen aan de context is vaak wat lastig uit te leggen. Daarnaast heeft Perl een berg voorgefinieerde vars die je maar net moet kennen (ook lastig omdat ze dus in meerdere vormen kunnen verschijnen). Maar op zich is het wel een prachtig taaltje als je er eenmaal bekend mee bent.

Denk dat bijv. PHP t vooral gewonnen heeft van Perl door de iets minder steile leercurve en integratie van voorgeprogde functies.

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Mja, ok... je bedoeld zeg maar %hash maar $hash{key} en @item maar $item[index]?
Ik snap je punt, maar ik vind het wel logisch dat het zo is... om redenen die je wel kent. Voel niet de behoefte om daar een holy-war over te starten.

En ja, PHP is wat dat aangaat erg voordelig, allerhande built-ins.... die je helaas ook meelaadt als je ze niet nodig hebt.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

Topicstarter
Dank voor alle berichten. Het verwijt van de 'newbie-vraag' is totaal vergeven hoor! :)
Bovenstaande berichten hebben volledig m'n vraag beantwoord! _/-\o_

Verwijderd

Dollar-pipe-plus-plus, en dat betekent dan ook nog iets...
Ik ken volgens mij maar 1 taal die cryptischer is dan Perl, en dat is APL. Ook een leuke taal trouwens. :)

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

MUBA schreef op donderdag 10 maart 2005 @ 22:49:
Dan ken je brainfuck nog niet.
Da's geen taal, dat is assembler in disguise... :+

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
@MUBA: Haha is het een sport voor je om allerhande onmogelijke talen op te sporen en aan te leren? :+

Dat brainfuck is echt geweldig :) Maar goed. Perl lust ik nog wel (en ik ken idd die redenen), Assembler haakte ik al een beetje bij af, maar Brainfuck is dan wel weer zo bizar dat het (bijna) leuk wordt...

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Morrar schreef op donderdag 10 maart 2005 @ 23:54:
@MUBA: Haha is het een sport voor je om allerhande onmogelijke talen op te sporen en aan te leren? :+
Welnee, ik kan VB5 en 6 (verschillen ook niet zo heel veel), andere BASIC-dialecten voor dos, JavaScript en Perl.

Toevallig weet ik van het bestaan van Brainfuck en dat het (brain)fucking wazig is. Vond het wel cool om te noemen :)

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1