Seite 1 von 2
reguläre Ausdrücke
Verfasst: 15.09.2004 15:14
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
Damit überprüfe ich bei einem Domaincheck, ob erlaubte Zeichen eingegeben wurden. Wie mache ich sowas in PB?
Gruß Ralf
Verfasst: 15.09.2004 15:24
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.
Verfasst: 15.09.2004 16:51
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
Verfasst: 15.09.2004 17:52
von Kiffi
Frosch hat geschrieben:Ich kriegs aber leider nicht gebacken.
WAS kriegst Du nicht gebacken.
WO gibt's konkrete Probleme?
Grüße ... Kiffi
Verfasst: 15.09.2004 18:53
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
Verfasst: 15.09.2004 19:15
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]
Verfasst: 15.09.2004 21:20
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
Verfasst: 15.09.2004 22:28
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
Verfasst: 15.09.2004 22:52
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
Verfasst: 16.09.2004 00:41
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