[RegExp] Alle RegExp-Syntaxzeichen maskieren

DelphiKing

King with a crown
ID: 46719
L
20 April 2006
6.553
729
Aloha,

ich möchte den User zweimal was eingeben lassen .. der erste String kann optionale angaben enthalten, die in Klammern gesetzt werden ("Test (Test)"), dann kann der User einen zweiten String eingeben und da soll dann geschaut werden, ob der auf den 1. String passt (also "Test", "Test (Test)" oder "Test Test").

Ich muss also erstmal den ersten String in eine RegExp umwandeln - dabei müssen aber natürlich alle RegExp-Syntaxzeichen des Strings maskiert werden, sonst gibt das ja ein Chaos. Gibts da schon eine fertige Funktion bzw. irgendeinen Workaround?

Bin leider sowieso immernoch ein RegExp-n00b, ich kriegs nicht gescheit gebacken -.-

Meine Umwandelfunktion ist bisher die folgende
PHP:
$text1 = "^".preg_replace("[\((.*)\)[ ]*]", 
  '[[(]?$1[)]? ]?', $text1)."\z^";
die funktioniert aber leider auch nicht wirklich. Macht aus "(to) do" dann
Code:
^[[(]?to[)]? ]?do\z^
, aber das tut nicht :roll:
Weiß da vielleicht auch jemand Rat?
Hat jemand zufällig genau so eine Funktion (alles in Klammern optional) und will mir damit den Jahresabschluss versüßen? :)


Viele Grüße,
flo
 
Threadschreiben bringt aber normal mehr Keys, als wenn du mich im ICQ anschreibst :biggrin: (du machst doch auch bei WhatPulse mit, oder ? :think: :shifty: )
Hm, prinzipiell schon, aber eine spontane Überprüfung hat gezeigt, dass der Client grad nicht läuft.. oder ich finde ihn nicht...

Du könntest noch viel mehr Keys sammeln, wenn du tolle RegExp tippen würdest! 8)
 
Hm, prinzipiell schon, aber eine spontane Überprüfung hat gezeigt, dass der Client grad nicht läuft.. oder ich finde ihn nicht...
Dann geh mal suchen :p
Du könntest noch viel mehr Keys sammeln, wenn du tolle RegExp tippen würdest! 8)
RegExp brauch ich eigentlich eher selten. Hab gestern mal wieder einen alten Klassiker - ob eine Eingabe eine Zahl is, wobei auch Tausender-Trennzeichen erlaubt sind - gebraucht.
 
Hm, SOOOO lang wie ich da rumprobiert habe, bis es jetzt endlich funktioniert.. das sind echt sauviele x_x

PHP:
$s1 = "Hallo (du)!";
$s1 = "^\A".preg_replace('(\\\\\\(([\w]*)?\\\\\\)( )?)',
  '(( )*(\\()?$1(\\))?( )*)?', 
  $s1).'\\z^';
// -> "Hallo!", "Hallo du!" und "Hallo (du)!" matchen :)
 
Ui.. sieht ja pervers aus. "Und wozu soll das gut sein?" :mrgreen:

DICH hab ich in ICQ gesucht, aber du warst ja (zu deinem Glück) net da :ugly:

Ist bestimmt auch pervers umständlich/latent falsch, aber es funktioniert immerhin ^^

Es soll bei meinem tollen Vokabel-Dingens z.B. bei englischen Vokabeln ("(to) be") auch "be" etc. als richtig erkennen ... das (to) ist immerhin nur nerviges Beiwerk!
 
Hö ?! 8O :hö:

Und was ersetzt das Ding ? *irgendwie ned glaub, dass das irgendwas matcht*
 
Es ersetzt in einen normalen, "lesbaren" String die geklammerten Teile durch RegExp's, um bei einer späteren preg_match() diese dann optional zu werten *net erklären kann und aufs Beispiel verweis*

Funktioniert aber tatsächlich .. zumindest in den paar Tests die ich gemacht habe ^^

Oder ums nochmal aus einem anderen Thread zu quoten:
Eine Änderung im Vokabelsystem (wie weiter oben vorgeschlagen): alle in Klammern stehenden Begriffe sind jetzt optional...
Beispiel:

Deutsch: essen
Englisch: (to) eat

Als richtig erkannt wird demnach: "eat", "to eat" und "(to) eat"