[Perl] Regular expressions

Pagina: 1
Acties:

  • kvdd
  • Registratie: Oktober 2004
  • Laatst online: 30-01 09:37
Op mijn website draai ik een proxy, geschreven in cgi. Maar het probleem is nu dat ik bepaalde sites d.m.v. "badwords" wil blokkeren en er uit wil filteren.

Het gaat dus om de gehele link.

Het lukt me al om door bijvoorbeeld:
code:
1
'badword\.[a-z]'
de website "badword.com" of "badword.nl" of "badword.dk" te filteren, en het werkt zelfs ook nog voor "goedwoordbadword.com", maar dát werkt weer niet voor "badwordgoedwoord.com", en dat zou ik ook graag willen.

Ik zou het zo willen hebben dat ik:
"goedwoord.nl/goedwoord/badword" er dus ook uit kan filteren.

En helemaal als:
"http://www.google.nl/search?hl=nl&q=badword&btnG=Google+zoeken&meta="

Óók eruit gefilterd werd.

Maar het lukt me niet, na zowat (voor mij) alle combinaties geprobeerd te hebben, bijvoorbeeld:
code:
1
2
'[a-z]badword\.[a-z]' 
'?badword?\.[a-z]'


Mijn gebruikte bronnen:
http://nl3.php.net/pcre
http://www.english.uga.edu/humcomp/perl/regex2a.html
Programming FAQ - Regular expressions

Heeft iemand enig idee?

[ Voor 8% gewijzigd door kvdd op 15-06-2007 20:00 ]


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 01-12 09:22
van wat ik hier lees, zou het iets van '.*badword.*'moeten zijn?

ach...in een volgend leven lach je er om!


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
je doet search ipv match blijkbaar. Als je searcht dan is 'badword' genoeg, als je matcht is '.*badword.*' wat je zoekt. (matchen betekent dat je hele regel aan de regexp moet voldoen; zoeken betekent dat er maar een deel aan hoeft te voldoen, waarbij je ipv true/false het characterid terug krijgt)

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

'badword' zou voldoende moeten zijn :)

En als je meerdere badwords tegelijk wil pakken: '(badword|nog_een_badword|blaat)'

Blog [Stackoverflow] [LinkedIn]


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

muba

Prince of Persia!

De oplossing is reeds gegeven, maar ik wil je graag wijzen op waar je de fout in gaat. Hmm, dit klinkt misschien vanuit de hoogte maar neem alsjeblieft aan dat ik de beste bedoelingen heb :D

Oke.

De vraag is, wat wil je?
Het antwoord: als "badword" in de string voorkomt, request filteren. Waar dan ook. Als domeinnaam, als onderdeel van een path, als onderdeel van een query string.

Tweede vraag: wat doe je?
Je kijkt of "badword", dan een punt, en dan 1 maal een van de letters van a-z in de string voorkomt.
Daarmee ondergraaf je de eis "waar dan ook" dus. Want je filtert nu alleen "badword" als het voor een punt komt, en zelfs dan alleen als er daarna nog een letter uit het alfabet staat.

Derde vraag, hoe zou je het moeten doen?
Nouja, zoals ik al zei, het is reeds hierboven beantwoord, maar om het toch maar even helemaal duidelijk te maken: zeg gewoon precies wat je bedoelt.
Je wilt searchen op "badword". Niet op "badword" plus punt plus letter.
Dus... zeg dat dan :D

Perl:
1
m/badword/i;

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


  • kvdd
  • Registratie: Oktober 2004
  • Laatst online: 30-01 09:37
Even op volgorde van reacties:
@Osiris: '*.badword.*' filterd (en je gelooft het niet) elke pagina eruit, ook die het badword helemaal niet bevatten. ;)

@ValHallASW: Door alleen het badword in te vullen, lukt het me om alle domeinnamen te filteren waarin het badword in voor komt. Maar niet: goedwoord.com/badword.

@Wolfboy: Aha, erg handig :)

@Muba: Dankje erg heldere uitleg, nu weet ik welke richting ik moet zoeken, maar wil je precies weten wat ik bedoel? Gewoon de hele link kunnen matchen als er het badword in voorkomt! ;)
Het antwoord: als "badword" in de string voorkomt, request filteren. Waar dan ook. Als domeinnaam, als onderdeel van een path, als onderdeel van een query string.
Exact! .. wat ik bedoelde, maar jou code:
code:
1
'm/badword/i'

werkt geheel niet. :?

We zijn er dus nog niet, maar zoals ik al aangaf werkt dit op domeinnamen:
code:
1
 'badword'

Maar een google query wordt niet gefilterd als het badword erin voorkomt.

Serieus, ik heb al veel handleidingen doorgenomen, maar daar komt nou net niet die DE volmaakte match in voor >:)

Iig lui, bedankt voor wat we al bereikt hebben! :*)

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Het lijkt er dus op dat je alleen domeinen kan filteren met het stukje waar je nu mee bezig bent, misschien moet je nog eventjes goed zoeken om het gedeelte voor de rest uit te lezen?

Blog [Stackoverflow] [LinkedIn]


  • kvdd
  • Registratie: Oktober 2004
  • Laatst online: 30-01 09:37
Neej ik had het fout, het werkt, op heel de link, inclusief querys en dergelijke. Ik probeerde namelijk om eerst naar google.nl te gaan, en dan 'badword' in te typen. En dat werkt nog wel helaas, al opend hij niet de foute opgegeven 'badwords' links.

Dus lui bedankt! :)

Edit:
One minor question :) :
Heeft iemand enig idee om een link alleen te filteren als: 'badword1" AND 'badword2' erin zit?

[ Voor 19% gewijzigd door kvdd op 16-06-2007 19:25 ]

Pagina: 1