Mail wieder preg_match-Problem ;-)
gondor
- php
Hallo,
wahrscheinlich die x'te Anfrage zu regulären Ausdrücken...
Sorry, aber ich habe schon lange vergeblich versucht. Hier mein Problem:
Ich möchte innerhalb eines Strings nach einem Wort suchen:
Der String kann folgend aussehen:
$string = '<p>Text</p><p>###last_order</p><p>Text</p>';
oder
$string = '<p>Text</p><p>###last_order_mwst</p><p>Text</p>';
if (preg_match("/###last_order/i", $string)) {
echo "Es wurde eine Übereinstimmung gefunden.";
} else {
echo "Es wurde keine Übereinstimmung gefunden.";
}
if (preg_match("/###last_order_mwst/i", $string)) {
echo "Es wurde eine Übereinstimmung gefunden.";
} else {
echo "Es wurde keine Übereinstimmung gefunden.";
}
Bei der ersten Variante kommt:
Es wurde eine Übereinstimmung gefunden.
Es wurde keine Übereinstimmung gefunden.
Bei der zweiten Variante kommt:
Es wurde eine Übereinstimmung gefunden.
Es wurde eine Übereinstimmung gefunden.
Hier liegt der Fehler. Ich möchte bei der zweiten Variante nur dann eine
Übereinstimmung haben, wenn auch wirklich 'last_order_mwst' im String
enthalten ist und nicht bei einem Teilstring 'last_order...'
Wie komme ich also zu dieser Ausgabe?
Es wurde keine Übereinstimmung gefunden.
Es wurde eine Übereinstimmung gefunden.
Danke für Hilfe,
gondor(..)
Wie komme ich also zu dieser Ausgabe?
In der Annahme, dass deine Schlüsselworte aus [A-Za-z0-9_] bestehen:
\b stellt eine wordboundary dar, dass 0 weite darstellt.
Es ist in "abc012<,.,.-,.,,,sdfjkh"
^hier ^hier
if (preg_match("/###last_order_mwst\b/i", $string)) {
echo "Es wurde eine Übereinstimmung gefunden.";
} else {
echo "Es wurde keine Übereinstimmung gefunden.";
}
...könnte dich zum Ziel führen.
ob _ wirklich in PHP als word interpretiert wird, habe ich jetzt nicht getestst, ist aber in Perl der Fall
mfg Beat
so einfach...
danke!
gondor(..)
Hallöchen,
if (preg_match("/###last_order/i", $string)) {
echo "Es wurde eine Übereinstimmung gefunden.";
} else {
echo "Es wurde keine Übereinstimmung gefunden.";
}if (preg_match("/###last_order_mwst/i", $string)) {
echo "Es wurde eine Übereinstimmung gefunden.";
} else {
echo "Es wurde keine Übereinstimmung gefunden.";
}
Wenn du mit preg\_match arbeitest, und der Suchbegriff definitiv am Ende von $string ist, dann setze unmittelbar nach dem Suchbegriff ein $-Zeichen (steht für "Zeilenende"):
if (preg\_match("/###last\_order$/i", $string)) {
------------------------------^
bzw.
if (preg\_match("/###last\_order\_mwst$/i", $string)) {
-----------------------------------^
MfG
vaudi
Hello,
Wenn du mit preg_match arbeitest, und der Suchbegriff definitiv am Ende von $string ist, dann setze unmittelbar nach dem Suchbegriff ein $-Zeichen (steht für "Zeilenende"):
if (preg_match("/###last_order$/i", $string)) {
------------------------------^
bzw.
if (preg_match("/###last_order_mwst$/i", $string)) {
-----------------------------------^
Aber das Pattern dann nicht in Doppelhäkchen bauen, sondern in einfachen.
if (preg_match('/###last_order_mwst$/i', $string))
sonst könnte der PHP-Parser Dir in die Suppe spucken.
http://www.php.net/manual/en/language.types.string.php
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hi,
Wenn du mit preg_match arbeitest, und der Suchbegriff definitiv am Ende von $string ist,
was definitiv nicht der Fall ist, siehe die Beispiele, die gondor angegeben hat.
cu,
Andreas