Andreas Vogt: brauche Hilfe zum Pattern bei preg_replace.

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

  1. 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.

    1. 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

      1. 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.

  2. 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?

    1. Hallo,
      der Datenbankname wird später nicht bekannt sein.

      Gruß Andreas

  3. @@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'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a
    1. Hallo,

      der Text wird von mysql generiert. K.A. ob beides das selbe Zeichen ist, werde es aber mal testen.

      Andreas

    2. 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

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. @@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'

        --
        Volumen einer Pizza mit Radius z und Dicke a: pi z z a
  4. 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: 1146

    Ich 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

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  5. 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

    1. 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?"