brauche Hilfe zum Pattern bei preg_replace.
Andreas Vogt
- php
0 suit0 Andreas Vogt0 suit
0 Timmeh0 Gunnar Bittersmann0 ChrisB0 Andreas Vogt1 suit
Hallo,
ich habe eine Zeichenkette die dadurch gekennzeichnet ist, dass ein bestimmter Bereich durch Single Quotes eingeschlossen ist. Der Text in diesem Bereich wird durch ein Punkt unterbrochen, und ich möchte den Teil vor dem Punkt entfernen. ;-)
Mein Text sieht so aus:
Database error, can't execute the query:
Select title, filename, alignment From blocklist
The returned error is: Table 'SERVERNAME.blocklist' doesn't exist
And the error code is: 1146
Ich möchte vor der Ausgabe dieser Meldung den Servernamen entfernen. Das geht imo doch am besten mit preg_replace() oder?
Wie müsste das Pattern dazu aussehen? Ich blick da nicht so ganz durch.
Gruß Andreas
Ich möchte vor der Ausgabe dieser Meldung den Servernamen entfernen. Das geht imo doch am besten mit preg_replace() oder?
wenn dir der Servername nicht bekannt ist, vermutlich ja
Wie müsste das Pattern dazu aussehen? Ich blick da nicht so ganz durch.
wörtlich: "The returned error is: Table '" gefolgt von "beliebige Zeichenkette" gefolgt von "' doesn't exist" wörtlich.
Hallo
wörtlich: "The returned error is: Table '" gefolgt von "beliebige Zeichenkette" gefolgt von "' doesn't exist" wörtlich.
und wo bleibt dabei der Punkt for dem Tabellennamen? Kannst du mir nicht zeigen wie der Pattern aussieht?
Andreas
und wo bleibt dabei der Punkt for dem Tabellennamen?
Mein Fehler
wörtlich: "The returned error is: Table '" gefolgt von "beliebige Zeichenkette" gefolt von wörtlich "."
Kannst du mir nicht zeigen wie der Pattern aussieht?
Sicher kann ich das - aber du sagst mir auch nicht, wie dein verwendetes Muster zur Zeit aussieht.
Moin,
sollte vor dem Tabellenname nicht der Datenbankname stehen? Der müsste ja bekannt sein, dann würde doch ein simples str_replace ausreichen, oder seh ich das falsch?
Hallo,
der Datenbankname wird später nicht bekannt sein.
Gruß Andreas
@@Andreas Vogt:
nuqneH
Database error, can't execute the query:
Select title, filename, alignment From blocklist
The returned error is: Table 'SERVERNAME.blocklist' doesn't exist
And the error code is: 1146
Du verwendest also für Apostroph, öffnendes und schließendes Anführungszeichen dasselbe Zeichen ' U+0027 apostrophe? Würdest du diese unterscheiden und ‘ U+2018 left single quotation mark (“this is the preferred character to use for apostrophe”) und ’ U+2019 right single quotation mark verwenden [Unicode Chart: General Punctuation], wäre es einfacher.
Ich möchte vor der Ausgabe dieser Meldung den Servernamen entfernen.
Du suchst nach " '" gefolgt von http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichenketten@title=mehreren Zeichen http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen@title=außer '.' und ersetzt dies durch " '".
Qapla'
Hallo,
der Text wird von mysql generiert. K.A. ob beides das selbe Zeichen ist, werde es aber mal testen.
Andreas
Du verwendest also für Apostroph, öffnendes und schließendes Anführungszeichen dasselbe Zeichen ' U+0027 apostrophe? Würdest du diese unterscheiden und ‘ U+2018 left single quotation mark (“this is the preferred character to use for apostrophe”) und ’ U+2019 right single quotation mark verwenden [Unicode Chart: General Punctuation], wäre es einfacher.
Wow, jetzt wird's aber lustig.
Du hast ein Logfile, in welches mehrere Prozesse schreiben, das eine in UTF-8 kodiert, das andere ISO-Latin kodiert.
Allways: Deine Syntax soll mit dem ASCII-Umfang allein zu parsen sein.
mfg Beat
@@Beat:
nuqneH
Wow, jetzt wird's aber lustig.
Du hast ein Logfile, in welches mehrere Prozesse schreiben, das eine in UTF-8 kodiert, das andere ISO-Latin kodiert.
Software, die nicht Unicode und UTF verwendet, ist nicht lustig, sondern nicht auf der Höhe der Zeit. :-b
Qapla'
Hi,
Mein Text sieht so aus:
Database error, can't execute the query:
Select title, filename, alignment From blocklist
The returned error is: Table 'SERVERNAME.blocklist' doesn't exist
And the error code is: 1146Ich möchte vor der Ausgabe dieser Meldung den Servernamen entfernen. Das geht imo doch am besten mit preg_replace() oder?
Nein, das geht am besten durch Konfiguration an der Stelle, an der die Daten erzeugt werden.
MfG ChrisB
Hallo,
habe mein Problem jetzt gelöst.
Hier meine Lösung:
$errormsg = preg_replace("/(Table ')(.*).(.*)(' )/", "Table '${3}' ", $errormsg);
Wer eine bessere Lösung hat, darf sie gerne posten.
Auf verklausuliertes Geschreibsel, mit dem ich nichts anfangen kann, verzichte ich allerdings gerne!
Gruß Andreas
Hallo,
habe mein Problem jetzt gelöst.
Hier meine Lösung:
$errormsg = preg_replace("/(Table ')(.*).(.*)(' )/", "Table '${3}' ", $errormsg);Wer eine bessere Lösung hat
Du verwendest im Ausdruck klammern, im Replacent schreibst packst du das zeug aber wieder per hand rein. Zudem speicherst du Zeichenketten in ein Subpattern die du nicht mehr benötigst - das spart nicht grade Ressourcen.
darf sie gerne posten.
pattern = "/(Table ').*.(.*')/"
replacement = "\1\2"
Nicht ausgiebig getestet.
Auf verklausuliertes Geschreibsel, mit dem ich nichts anfangen kann, verzichte ich allerdings gerne!
Auf unfreundliche Forderungen ohne Hilfe zur Mitarbeit verzichte ich üblicherweise auch gerne.
"Ich _will_ XXX, wie muss der Ausdruck aussehen" ist schlecht.
Besser wäre etwas in die richtung gewesen "Mein Ausdruck sieht so aus: XXX - das Muster trifft aber auf YYY und ZZZ zu, soll aber nur auf ABC zutreffen, wo liegt mein Denkfehler?"