PHP Benötige preg_match Experten

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
663
hallo liebe community,

ich bräuchte eine kleine Hilfe von jemand der sich mit preg_match auskennt bei php. mein Ticket-System verwendet die funktion um zu entscheiden, ob eine gesendete Mail ein neues ticket ist oder eine antwort. ich muss jetzt aber den Betreff-Style anpassen, daher muss die Funktion angepasst werden, die Zeile sieht so aus:

PHP:
if ( preg_match('/\[#([A-Z0-9]{3}\-[A-Z0-9]{3}\-[A-Z0-9]{4})\]/', str_replace(' ', '', $tmpvar['subject']), $matches) )

ich hatte es einfach mal damit versucht, aber das geht nicht :D

PHP:
if ( preg_match('/\[#XX-Support ([A-Z0-9]{3}\-[A-Z0-9]{3}\-[A-Z0-9]{4})\]/', str_replace(' ', '', $tmpvar['subject']), $matches) )

der Präfix soll also geändert werden von [#YYY-YYY-YYYY] Ticket zu [#XX-Support YYY-YYY-YYYY] Ticket.

danke!
 
Natürlich nicht. Du schmeißt hinten in der Eingabe per replace() alle Leerzeichen weg, Matches gegen Leerzeichen gehen also notwendigerweise schief.

Nimm das Leerzeichen zwischen "XX-Support" und dem restlichen Ausdruck weg, dann sollte es passen.
 
das leerzeichen brauche ich aber sonst sieht es so aus...

PHP:
[#XX-SupportYYY-YYY-YYYY]

Y = ticket-ID
 
Ich bin sowieso etwas skeptisch mit dem str_replace() dahinten. 🤔

Schmeiß das mal raus, laß das Leerzeichen im Ausdruck drin (besser noch, sag \s+ oder sowas) und guck ob das paßt.

Mit dem str_replace() sehe ich auch gültige Tickets wie
#ABC-D EF-G H I - JK LM.

Ich nehm mal an, daß die Ticket ID weiterhin alphanumerisch ist, also A-Z und 0-9? Oder kommt da noch was dazu?
 
oh doch einfacher als gedacht, einfach das leerzeichen raus im php dann geht es auch wenn im email-betreff ein Leerzeichen ist:

PHP:
if ( preg_match('/\[#XX-Support([A-Z0-9]{3}\-[A-Z0-9]{3}\-[A-Z0-9]{4})\]/', str_replace(' ', '', $tmpvar['subject']), $matches) )
 
Warum ersetzt du jegliche Leerzeichen? Pattern Matching ist dafür gedacht, dass sowas beachtet werden soll. Es gibt nicht umsonst die \s-Klasse, welche jegliches Whitespace betrifft.
https://www.pcre.org/current/doc/html/pcre2pattern.html schrieb:
The default \s characters are HT (9), LF (10), VT (11), FF (12), CR (13), and space (32), which are defined as white space in the "C" locale. This list may vary if locale-specific matching is taking place. For example, in some locales the "non-breaking space" character (\xA0) is recognized as white space, and in others the VT character is not.
Wenn du nach #XX-Support\s* matchen würdest, wären die Leerzeichen egal und du musst den String vorher nicht noch zurecht schnippeln.
 
  • Gefällt mir
Reaktionen: RalphS
Ich merk schon, an dem mit dem "rüberbringen was ich meine" muß ich noch arbeiten 😄 😊

Weil, genau das hatte ich gemeint: A; Leerzeichen raus; und B; das mit dem str_replace() ist bissel doof und sorgt sicherlich für unerwartete Ergebnisse.

:daumen:
 
Zurück
Oben