1Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
609
609
EMPFEHLEN
-
25.06.10 10:04 #1
- Registriert seit
- Feb 2007
- Beiträge
- 48
Hallo,
ich möchte den Usern die Möglichkeit geben einen Regulären Ausdruck einzugeben.
Natürlich traue ich den Usern nicht und möchte diesen Ausdruck auf Regex-Validität prüfen, bevor dieser ausgeführt wird.
So, nun wird in diesen Video (-17:10) genau so ein Pattern vorgestellt.
Hier noch mal ein Link zur Präsentation .
Dieser Ausdruck funktioniert in meinen Editor (Kate), aber PHP gibt mir folgende Fehler:
Code :1
Warning: preg_match() [function.preg-match]: Unknown modifier ']' in ***
Hier noch mal das Pattern:
Wer weiß warum, oder kennt eine alternative Lösung?Code :1
/\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/
Ach ja, natürlich habe ich das mit und ohne zusätzliche Delimiter versucht.Geändert von blade runner (25.06.10 um 10:13 Uhr)
-
25.06.10 10:43 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.Mit einem reg. Ausdruck kann man ja keinen Schaden anrichten, d.h du könntest das Pattern einfach auf einen leeren String anwenden und z.B. prüfen ob preg_match FALSE zurückgegeben hat.
Wie hast du denn den Ausdruck angewendet?
Naja, reg. Ausdrücke sind nicht gleich reg. Ausdrücke. Dieser bietet lediglich rudimentäre Überprüfung und würde nicht alle in PHP gültigen reg. Ausdrücke akzeptieren, und es würde auch kaum ungültige reg. Ausdrücke erkennen (lediglich Ausdrücke die ungültige Zeichen enthalten).
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
25.06.10 11:21 #3
- Registriert seit
- Feb 2007
- Beiträge
- 48
Hi Deepthroat,
erstmal Danke für Deine Antwort.
Nein, FALSE reicht nicht. Bei FALSE ist das Pattern ja syntaktisch richtig. Es geht sich um einen fehlerhaftes Pattern.
Meine bisherige Lösung ist aber schon so ähnlich.
Ich finde sie aber völlig daneben, da ich erst einen Fehler auslösen muss, damit evtl. vorherige Regexfehler nicht mehr vorhanden sind.
Weiterhin handelt es sich um ein Array von Pattern die geprüft werden. Von da her ist das Array von error_get_last bei Regexfehlern immer gleich.
Code :1 2 3 4 5 6 7
@fopen();//erzeugt fehler->setzt den last error zurück @preg_match($aValue['pattern'],''); $aLastError=error_get_last(); if(substr($aLastError['message'],0,12)=='preg_match()'){ $aValue['patternFail']=$aValue['pattern']; unset($aValue['pattern']); }Ich liebe solche Fragen.Wie hast du denn den Ausdruck angewendet?
- Ich stelle Sie selber sehr gerne.
Meine Vorgehensweise bei so etwas ist:
Code :1 2 3
while(!$code){ $code=anderer Code; }
Also so ziemlich alles was mir eingefallen ist, aber bekomme weder die einzelnen Möglichkeiten zusammen noch die Reihenfolge.
Ja, ist klar.Naja, reg. Ausdrücke sind nicht gleich reg. Ausdrücke. Dieser bietet lediglich rudimentäre Überprüfung und würde nicht alle in PHP gültigen reg. Ausdrücke akzeptieren, und es würde auch kaum ungültige reg. Ausdrücke erkennen (lediglich Ausdrücke die ungültige Zeichen enthalten).
Aber es muss doch dafür eine Lösung geben. Bzw. einen Grund warum er in PHP nicht geht.
Ein Regex-Pattern hat ja auch ein Muster, welches man erfassen kann (Meine Regex-Kenntnisse reichen einfach nicht aus um dieses zu definieren.).
Und wenn ich den Usern so etwas erlaube, dann können diese auch ein wenig eingeschränkt werden. Wenn sich jemand deswegen beschwert, dann kann man immer noch was verschlimmbessern.
... oder gibt es eine Möglichkeit error_get_last zu initialisieren (Ohne den error Handler zu ändern)?
Schöne GrüßeGeändert von blade runner (25.06.10 um 11:24 Uhr)
-
Also bei mir funktioniert das hier:
PHP-Code:@preg_match("/O//","Haus",$match);
$err = error_get_last();
if( strpos($err["message"], "preg-match") )
echo "FEHLER";
else
var_dump($match);
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
25.06.10 11:50 #5
- Registriert seit
- Feb 2007
- Beiträge
- 48
-
25.06.10 11:51 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Nein, ist es nicht. Siehe z.B. http://www.php.net/manual/en/function.preg-match.php:
preg_match() returns FALSE if an error occurred.Aber beantworten tust du sie nicht?! Ich wollte sehen wie dein Code aussieht.PHP-Code:if (preg_match("#x**#", "") === FALSE) {
echo "error in pattern";
}
\edit: also bei mir funktioniert:
GrußPHP-Code:$r = '#/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\/])*\]|[^\x00-\x1f\\/\[])+/[gim]*#';
Geändert von deepthroat (25.06.10 um 11:55 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Naja, die Lösung hast du eigentlich schon gepostet

Guck mal in deinem zweiten Post erste Zeile
Das musst du nur am Anfang der Schleife jedesmal neu aufrufen
Achtung Spoiler:
$ArrayMitPattern
foreach( $arrayMitPAttern as $pattern){
//errorHandler zurücksetzten
//preg_match ausführen
//ggf Fehler abfangen
}
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
25.06.10 11:57 #8
- Registriert seit
- Feb 2007
- Beiträge
- 48
Aber....
Deepthroat hat recht, es ist FALSE.
preg_match gibt 1 oder 0 zurück und im Fehlerfall FALSE.
Naja, Logischer fände ich true, false und im Fehlerfall null.
THX@all.
Edit: Hups geht das schnell hier. Alle Antworten fast Zeitgleich.
-
25.06.10 12:07 #9
- Registriert seit
- Feb 2007
- Beiträge
- 48
@deepthroat: THX, es lag an den Delimitern.
Sorry, fürs nicht Antworten, der Code funktionierte ja nicht und war eliminiert. ... und es gab viiele Versionen.
Ähnliche Themen
-
URL prüfen mit Regex
Von HerbertJ im Forum PHPAntworten: 3Letzter Beitrag: 22.12.09, 11:42 -
XML mittels DTD in Saxon unter Java auf Gültigkeit prüfen
Von Velow im Forum JavaAntworten: 1Letzter Beitrag: 21.05.09, 21:02 -
Substrings herausfiltern mittels Regex
Von navyseal1 im Forum PHPAntworten: 8Letzter Beitrag: 24.07.08, 15:39 -
Ankerpunkte mittels Regex auslesen
Von U-Wasser-Gehaeuse im Forum PHPAntworten: 5Letzter Beitrag: 12.03.07, 20:09 -
String mittels regex bearbeiten
Von Samuel im Forum PHPAntworten: 5Letzter Beitrag: 02.10.03, 14:09





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren