[regex] Speciale karakters filteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
Ben nu paar dagen aan het spelenmet regex maar kom er maar niet uit hoe bv % $ @ # etc te filteren met regex.
Gewoon getallen en het hele alfabet lukt me wel maar iets wt begint of eindigd met een @ , % en $ of iets dergelijks krijg ik niet voor elkaar.
En een echt programma om te testen heb ik nog niet gevonden behalve dan http://antispamsniper.com/regexpcheck.html en regexbuddy is niet mijn ding.

Acties:
  • 0 Henk 'm!

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 14-09 14:42

dominic

will code for food

Alles wat niet alfanumeriek is:
code:
1
[^a-z0-9]


^=not

Download my music on SoundCloud


Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
Thanks, helemaal niet aan gedacht het op die manier aan te pakken.
Was allemaal bezig specifiek op karakter te filteren maar omgekeerd kan natuurlijk ook.
Maar nu krijg ik dus alles wat niet alfanumeriek is maar kan ik ook bv specifiek alleen @ pakken?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Natuurlijk, dan gebruik je gewoon een @ in je regexp. Als je maar één enkel karakter wil filteren heb je sowieso geen regexp nodig. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
ja ok maar was mss niet helemaal duidelijk. Wat ik bedoelde was elke willekeurige alfanumerieke karakter voorafgaand met bv alleen een @ of alleen met %

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
schumi2004 schreef op donderdag 06 maart 2008 @ 07:46:
[...]elke willekeurige alfanumerieke karakter voorafgaand met bv alleen een @ of alleen met %
Je formulering is grammaticaal niet helemaal duidelijk. Bedoel je
elk willekeurige alfanumerieke karakter direct voorafgegaan door een @ of een %
code:
1
[@%][a-zA-Z0-9]

of bedoel je
een @ of een % (niet noodzakelijk onmiddellijk) gevolgd door een alfanumeriek teken
code:
1
[@%].*[a-zA-Z0-9]


Ofwel: nauwkeurig formuleren wat je wilt is een eerste vereiste als je gaat programmeren.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

schumi2004 schreef op woensdag 05 maart 2008 @ 22:39:
En een echt programma om te testen heb ik nog niet gevonden
Vijf regels code in een willekeurige taal?

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
@sam.vimes
Ja klopt deed via mobiel, was niet echt handig maar je eerste oplossing is wat ik bedoelde maar werkt alleen niet.
Na wat lezen kwam ik iets tegen dat me zei het op deze manier te doen.
code:
1
{@}+[a-zA-Z0-9]

Maar werkt ook niet

@Confusion, wis de vraagstelling een beetje, wil je 5 regels code van mij zien?

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Probeer The Regex Coac eens. Is heel makkelijk om te testen en je ziet on the fly wat er wordt gemacthed in een voorbeeld-string.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

schumi2004 schreef op donderdag 06 maart 2008 @ 19:08:
@Confusion, wis de vraagstelling een beetje, wil je 5 regels code van mij zien?
Nee, ik bedoel dat 'een programma om te testen' niet moeilijk is om zelf te schrijven.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.PatternSyntaxException;

public class RegexTester {

    public static void main(String[] args) {

        if (args.length < 2) {
            System.out.println("Usage: RegexTester <pattern> <input-string>");
            System.exit(1);
        }

        Pattern pattern = null;
        try {
            pattern = Pattern.compile(args[0]);
        }
        catch (PatternSyntaxException pse) {
            System.out.println("That regex is not valid: " + pse.getMessage() + ".");
            System.exit(2);
        }

        final Matcher matcher = pattern.matcher(args[1]);

        if (matcher.matches()) {
            System.out.println("Regex matches input string.");
            for (int i = 0; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + " matches: " + matcher.group(i) + ".");
            }
        }
        else {
            System.out.println("No match.");
        }
    }
}

[ Voor 25% gewijzigd door Confusion op 06-03-2008 21:43 . Reden: Programma iets hulpvaardiger gemaakt. ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Dat zijn geen 5 regels, maar 35! :+

Verder kan RegexBuddy nog wel eens handig zijn bij het maken en testen van regular expressions.

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
schumi2004 schreef op donderdag 06 maart 2008 @ 19:08:
@sam.vimes
Na wat lezen kwam ik iets tegen dat me zei het op deze manier te doen.
code:
1
{@}+[a-zA-Z0-9]

Maar werkt ook niet
denk dat je nog iets meer moet gaan lezen, want je gebruikt de {} helemaal verkeerd...

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

djiwie schreef op vrijdag 07 maart 2008 @ 09:52:
Dat zijn geen 5 regels, maar 35! :+
Minder dan 6 wordt echt te ranzig O-)
Java:
1
2
3
4
5
6
import java.util.regex.*;
public class RegexTester {
    public static void main(String[] args) {
        final Matcher matcher = Pattern.compile(args[0]).matcher(args[1]);
        System.out.println("Regex matches input string: " + matcher.matches());
        for (int i = 0; i <= matcher.groupCount(); i++) System.out.println("Group " + i + " matches: " + matcher.group(i) + ".");}}

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
special chars moet je meestal escapen met een \, voor je erop kan matchen.

$ en ^ weet ik in ieder geval van, dat deze einde en begin van een regel aangeven, dus als je op de literal wil matchen: use de escape \

Geen idee of @ een special char is, maar dat kan programmeertaal afhankelijk zijn, en wat voor type regexps het ondersteund (POSIX, PCRE... en vast nog wat meer varianten).

Zoek de ins-en-outs op van je taal-specifieke regexp implementatie, zoek uit wat special chars zijn, en hoe je die als literal kan gebruiken in een regexp.

Kan me niet herinneren dat ik rare fratsen uit moet halen om een % te zoeken...

Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
Edwardvb schreef op vrijdag 07 maart 2008 @ 10:08:
[...]


denk dat je nog iets meer moet gaan lezen, want je gebruikt de {} helemaal verkeerd...
Yups, ben me verder gaan verdiepen en samen met de reply's hier heb ik het nu gevonden moest dus dit zijn: [\@][a-zA-Z0-9_-]+

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
schumi2004 schreef op zondag 09 maart 2008 @ 15:42:
[...]

Yups, ben me verder gaan verdiepen en samen met de reply's hier heb ik het nu gevonden moest dus dit zijn: [\@][a-zA-Z0-9_-]+
Kan dus ook gewoon zo:
code:
1
@[a-zA-Z0-9_-]+

Een '@' is geen regex metacharacter en heeft daarom geen backslash nodig om 'm te quoten. Bovendien is een character class met slechts een element [@] zinloos en leidt alleen tot meer geheugengebruik en performanceverlies. Alleen heel goede regex-compilers zullen deze uit zichzelf optimaliseren tot @.

Je hebt nu een regex die match op een @ gevolgd door een of meer letters, cijfers, underscores en/of min-tekens.
Voorbeelden van wat NIET matcht: "abcdefg", "%&*@#!@!^&&*" (zonder quotes).
Voorbeelden van wat WEL matcht: "@V@.^^^*", "qqq&^@-.#".

Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 11:10
djiwie schreef op vrijdag 07 maart 2008 @ 09:52:
Dat zijn geen 5 regels, maar 35! :+

Verder kan RegexBuddy nog wel eens handig zijn bij het maken en testen van regular expressions.
Daar is het ook java voor ;)
Anyway ik test altijd hiermee:

http://regexlib.com/RETester.aspx

of met php:
PHP:
1
2
3
4
$strings = array('test1','test2','test3')
foreach ($strings as $string) {
   echo preg_match('pattern',$string);
}


zie niet wat je dan niet kan testen..

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
@ Hierboven, dat gaat niet werken. variable tussen single-quotes worden niet geparsed. Het is overigens ook netter om de variable buiten de quotes te halen.

Acties:
  • 0 Henk 'm!

  • schumi2004
  • Registratie: Februari 2004
  • Laatst online: 15:38
sam.vimes schreef op maandag 10 maart 2008 @ 10:25:
[...]

Kan dus ook gewoon zo:
code:
1
@[a-zA-Z0-9_-]+

Een '@' is geen regex metacharacter en heeft daarom geen backslash nodig om 'm te quoten. Bovendien is een character class met slechts een element [@] zinloos en leidt alleen tot meer geheugengebruik en performanceverlies. Alleen heel goede regex-compilers zullen deze uit zichzelf optimaliseren tot @.

Je hebt nu een regex die match op een @ gevolgd door een of meer letters, cijfers, underscores en/of min-tekens.
Voorbeelden van wat NIET matcht: "abcdefg", "%&*@#!@!^&&*" (zonder quotes).
Voorbeelden van wat WEL matcht: "@V@.^^^*", "qqq&^@-.#".
Thanks weer wat geleerd maar wat jouw voorbeeld betreft, de WEL match, hoort deze niet "@aBcDE_F0-3_54khg-vj24" te zijn? Op deze karakters match ik zoals jou uitleg ook aangeeft plus dat de @ aan begin moet staan.
mocean schreef op donderdag 06 maart 2008 @ 19:24:
Probeer The Regex Coac eens. Is heel makkelijk om te testen en je ziet on the fly wat er wordt gemacthed in een voorbeeld-string.
Werkt perfect, handige tool ;)

Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 11:10
Depress schreef op maandag 10 maart 2008 @ 13:31:
@ Hierboven, dat gaat niet werken. variable tussen single-quotes worden niet geparsed. Het is overigens ook netter om de variable buiten de quotes te halen.
ja hallo ik volgde een les :)

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • silentsnake
  • Registratie: September 2003
  • Laatst online: 21-09 05:27
Ik weet niet of ik de vraag helemaal goed begreep, maar iets als @fdsj##491_92 matched dus ook met de regex van sam.vines.

Overgens om regex te testen, het werkt een willekeurige unix bak ook prima:
code:
1
$ echo "bla" | egrep "@[a-zA-Z0-9_-]+"


Als de echo terug komt matched je regex, anders niet.
Pagina: 1