Avatar billede paaskehare Nybegynder
20. maj 2009 - 20:00 Der er 8 kommentarer og
1 løsning

Match en linje der ikke indeholder bogstaver

Hejsa, jeg prøver at bygge en regular expression der matcher en linje der ikke indeholder nogen bogstaver.

Efter selv at have leget med det nåede jeg frem til følgene:
(\W)+\n

Men jeg har ærlig talt ikke rigtigt nogen idé om hvordan det skulle virke :/

Der er 200 point til gutten der kan hjælpe mig :)
Avatar billede acore Ekspert
20. maj 2009 - 23:26 #1
Din regexp vil fx matche "abc1" - du skal både have start og slut af linie med og så sikre, at der ikke står biogstaver imellem:

^[\W]+$

Dvs. start af linien (^) efterfulgt af ([\W]+) som er et eller flere tegn (har valgt + fordi du brugte det - kunne også være *), som ikke er bogstaver, og til slut afslutning af linien ($).

Det skal lige siges, at der kan være variationer afhængigt af hvilket "miljø" du vil bruge den i - det skriver du ikke.
Avatar billede paaskehare Nybegynder
22. maj 2009 - 14:34 #2
Jeg skal bruge den i et php script hehe, men efter hvad jeg har forstået så matcher * 0, til uendeligt antal gange, og + matcher 1, til uendeligt antal gange.

Og jeg kunne desværre ikke få din kode til at virke :/

Jeg kan også prøve at uddybe lidt, jeg har en fil hvor der står nogle underlige tegn i på nogen af linjerne, og de tegn skulle gerne væk, så derfor, i stedet for bare at fjerne tegnene, så fjerner jeg hele linjen hvis der ikke står nogle bogstaver på den alligevel.
Avatar billede paaskehare Nybegynder
25. maj 2009 - 14:46 #3
Håber det er i orden lige at bumpe, kunne godt tænke mig et svar på det her, det kan da ikke være helt umuligt at matche en linje der ikke er bogstaver på :)
Avatar billede acore Ekspert
27. maj 2009 - 20:39 #4
Beklager forsinkelsen, men...

Nu skriver du ikke hvad du mener med "ikke virke" og jeg har da også selv fundet en fejl - \W matcher både tal og bogstaver, og det er vel ikke meningen. Så nu har jeg et nyt forslag. Denne gang har jeg testet det, og vedlægger test-koden (php):

<?php
$tests = array("bogstaver", "bogstavogtal", "kun tal", "", "(", "!#¤%&/()");
$re = "/^[^a-zA-Z]+$/";

foreach($tests as $s)
  echo($s." : ".(preg_match($re, $s)? "Y": "N")."<br />");
?>

Hvis tomme linier IKKE skal matches er den ok. Hvis tomme linier SKAL matches, så skal + byttes ud med * i $re.
Avatar billede paaskehare Nybegynder
02. juni 2009 - 11:34 #5
Du må meget undskylde, men jeg kan stadig ikke få det til at virke, har nogle bindestreger som den slet ikke hverken matcher eller fjerner.

Bruger følgene:

$var = preg_replace("/^[^a-zA-Z]+$/", "", $var);

Ellers tusind tak for hjælpen hidtil :)
Avatar billede acore Ekspert
02. juni 2009 - 22:54 #6
Kan du få mit eksempel til at virke?

Det med bindestregerne må du forklare bedre. Og ligeså hvorfor du vil bruge replace når opgaven er at finde blanke linier.
Avatar billede paaskehare Nybegynder
04. juni 2009 - 14:02 #7
Jeg kunne ikke få dit eksempel til at virke, og idéen i at bruge replace er at jeg skal fjerne den tomme linje :) Men for at fjerne den skal man jo først finde den ;)

og det er fordi det er nogle filer der er fyldt med ascii jeg har, jeg får fjernet det meste vha. et andet regex eksempel, men ting som bindestreger, kolon osv. skal ikke fjernes da det er konkret tekst, men det er ikke "tekst" hvis det står på en linje hvor der ikke er nogle bogstaver. dvs. der kan godt stå følgene:

Resultat: 12 - 7 = 5.

men ikke det her:

:/---;)"#(!"---

Håber du forstår hvad jeg mener med det nu ^^
Avatar billede paaskehare Nybegynder
14. juni 2009 - 15:42 #8
Kunne det tænkes at der var andre der havde et forslag også? :-)
Avatar billede paaskehare Nybegynder
15. juni 2009 - 08:11 #9
Jeg har fået det til at virke, fik noget hjælp af en over IRC, og han kom med følgene eksempel:

(?:((\x0A|\x0D)|\x0A|\x0D))+[^\w]+(?:((\x0A|\x0D)|(\x0A|\x0D))+)

Jeg stikker dig alligevel 200 point fordi du er den eneste der er kommet med et forslag :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester