reguläre Ausdrücke

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Frosch
Beiträge: 52
Registriert: 08.09.2004 00:39
Kontaktdaten:

reguläre Ausdrücke

Beitrag von Frosch »

Hallo,

gibt es in PB so etwas wie reguläre Ausdrücke, also wie in Perl oder PHP z.B. preg_match ?

In PHP sieht das z.B. so aus

Code: Alles auswählen

if(!preg_match("([^a-zA-Z0-9-])",$domain,$array)){...
Damit überprüfe ich bei einem Domaincheck, ob erlaubte Zeichen eingegeben wurden. Wie mache ich sowas in PB?

Gruß Ralf
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Hi Ralf Frosch,

auf der Seite von André http://www.purearea.net , auch oben verlinkt, finden sich einige Userlibs welche sehr einfach zu installieren sind. Darunter müsste auch eine Userlib von FloHimself sein welche es erlaubt mit Regular Expressions zu arbeiten.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Frosch
Beiträge: 52
Registriert: 08.09.2004 00:39
Kontaktdaten:

Beitrag von Frosch »

Hallo freedimension,

DANKE! für die Info. Ich kriegs aber leider nicht gebacken. Mein Englisch ist wohl auch schon etwas eingerostet.

Gruß Ralf
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Frosch hat geschrieben:Ich kriegs aber leider nicht gebacken.
WAS kriegst Du nicht gebacken. WO gibt's konkrete Probleme?

Grüße ... Kiffi
Frosch
Beiträge: 52
Registriert: 08.09.2004 00:39
Kontaktdaten:

Beitrag von Frosch »

@Kiffi,

ich denke ich bräuchte ein konkretes Beispiel, so wie ich es oben im PHP gegeben habe. Aus dem Beispiel das bei der Libery war werd ich nicht schlau. Ich möchte einfach nur bestimmte Zeichen in einem String zulassen, also z.B. A-Z oder a-z oder 0-9. So wie in meinem PHP Beispiel.

Gruß Ralf
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@Frosch:

Ich habe mal einen Newsreader als Test für Flo's Lib gemacht.
Vielleicht guckst Du Dir den mal an:

[EDIT]cutted[/EDIT]
Zuletzt geändert von benny am 15.09.2004 22:10, insgesamt 1-mal geändert.
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Frosch
Beiträge: 52
Registriert: 08.09.2004 00:39
Kontaktdaten:

Beitrag von Frosch »

@benny,

es funktioniert bei mir nicht. Es lad nicht mal die rdf Datei runter.

Hm, ich stell die Frage mal anders. Angenommen ich will eine Eingabe überprüfen. Text$ darf nur die Zeichen 0-9 und A-Z und a-z enthalten. Wenn andere Zeichen in Text$ enthalten sind soll das zu einer Fehlermeldung führen. Wer kann mir ein kleines Beispiel dazu geben wie ich sowas realisiere.

Gruß Ralf
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@Frosch:

Hast recht, funzt irgendwie nicht mehr ... muss ich mir mal angucken.
Scheint das RDF-File nicht richtig runterzuladen ...

Zurück zum eigentlich Problem. Ich habe mich bisher nicht sehr viel mit
Regular Expressions auseinander gesetzt und auf den ersten Blick
wirken sie echt ein wenig verwirrend.

Benutzt man den Ausdruck aus Deinem PHP-Beispiel schaut es folgender-
maßen aus:

Code: Alles auswählen

; Nur Zahlen, Buchstaben (groß / klein) und das Minuszeichen!!!!
*reg = RegComp("([^a-zA-Z0-9-])")
domain.s = "testdomain"
If RegExec(*reg, domain)
  Debug "Fehler - Bitte nur Zahlen und Buchstaben !!!"
Else
  Debug "Eingabe Korrekt"
EndIf
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@Frosch:

Nochmal zum Newsticker-Programm ... irgendwie kann mein Prog den
News von heise.de nicht runterladen. Gibt immer ein Fehler.

Bei einem anderen Newsticker funktioniert es bei mir...

Naja, ist halt schon über ein Jahr alt ... vollständigkeithalber, hier mal
ne Version, die zumindest bei mir ;-), läuft:

Code: Alles auswählen

; Kleiner Test der neuen Regular Expression Lib von FloHimself
; _heise-news-ticker_
;
; benny!
;
; PS:
; benötigt demnach die Lib von FloHimself [siehe PureArea.net]
; sowie eine bestehende InternetVerbindung voraus (wird nicht getestet)


Dim Titel.s(150)
Dim Linkh.s (150)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Gadget_0
  #Gadget_1
  #Gadget_3
EndEnumeration


Procedure NewsAktualisieren()

*Reg = RegComp ("(<TITLE>|<title>)(.*)(</TITLE>|</title>)")
*Reg2= RegComp ("(<LINK>|<link>)(.*)(</LINK>|</link>)")

If URLDownloadToFile_(0, "http://www.onlinekosten.de/news/ticker.php?format=rdf", "news.rdf", 0, 0) = #S_OK

If (ReadFile(1, "news.rdf"))

counter = 0

  While Eof(1)=0
  
    news.s = ReadString()
    title.s = Space(100)
    link.s = Space(100)
    
    If (RegExec(*Reg, news.s))
      RegSub(*Reg, "\2", title.s)
      Titel.s(counter) = title.s
      counter = counter + 1
    EndIf
    
    If (RegExec(*Reg2, news.s))
      RegSub(*Reg2, "\2", link.s)
      Linkh.s(counter) = link.s
    EndIf
  
  Wend
  
  CloseFile(1)
  
  ClearGadgetItemList(#Gadget_3)
  
  For i=1 To counter
    AddGadgetItem(#Gadget_3, -1, Titel.s(i))
  Next i

  
EndIf
EndIf
EndProcedure

Procedure NewsAnzeigen(news.l)

  news.l = news.l + 2
  
  If news.l > 1
     RunProgram(linkh.s(news.l))
  EndIf

EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 215, 0, 480, 400,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "News Ticker by benny! - weltenkonstrukteur.de")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Gadget_0, 15, 15, 225, 30, "Newsfeed Aktualisieren")
      ButtonGadget(#Gadget_1, 255, 15, 210, 30, "News Anzeigen")
      ListViewGadget(#Gadget_3, 15, 60, 450, 315)
      
    EndIf
  EndIf
EndProcedure


Open_Window_0()

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    
    ;Debug "WindowID: " + Str(EventWindowID())
    
    GadgetID = EventGadgetID()
    
    If GadgetID = #Gadget_0
      NewsAktualisieren()
      
    ElseIf GadgetID = #Gadget_1
      NewsAnzeigen(GetGadgetState(#Gadget_3))
          
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

End
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Frosch
Beiträge: 52
Registriert: 08.09.2004 00:39
Kontaktdaten:

Beitrag von Frosch »

@benny,

hey, das funktioniert ja. Super!! DANKE!!!!!!!!

Vielleicht ist die Frage blöd, aber weißt Du wozu das Sternchen vor reg ist? *reg

Gruß Ralf
Antworten