php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.09.2007, 11:02  
Benutzer
 
Registriert seit: 22.03.2005
Beiträge: 59
StartUpBoy
Standard preg_match_all Problem

Hi...
ich versuche gerade eBay-Emails den Versandpreis zu entlocken.
Das hat auch bisher ganz gut funktioniert, nur kommen ab und zu Mails mit veränderten Versand-Strings an und meine Funktion findet den Versand nicht mehr...

Der bisher funktionierende Versand:
Code:
Verpackung & Versand: EUR 240,00
Versicherter Versand: EUR 240,00
Code:
if (preg_match_all("/(Verpackung & Versand:)([\s\n\r]*)(Versicherter Versand:)([\s\n\r]*)(EUR)([\s\n\r]*)([0-9.,]*)([\s\n\r]*)/",$message["body"]["main"][0]->text,$patArray,PREG_SET_ORDER)){
  if (is_array($patArray)){
    return($patArray[0][7]);
  }	
}
Nun kommt jedoch noch die Möglichkeit:
Code:
Verpackung & Versand: EUR 240,00
Versicherter Sonderversand (z.B. Möbel, KFZ):  EUR 240,00
hinzu...

Ich habe folgenden Ansatz, aber es will irgendwie nicht funktionieren...
Code:
if (preg_match_all("/((Verpackung & Versand:)([\s\n\r]*)(Versicherter Versand:)([\s\n\r]*)(EUR)([\s\n\r]*)([0-9.,]*)([\s\n\r]*)) | (Verpackung & Versand:)([\s\n\r]*)(Versicherter Sonderversand \(z.B. M\öbel, KFZ\):)([\s\n\r]*)(EUR)([\s\n\r]*)([0-9.,]*)([\s\n\r]*)/", $message["body"]["main"][0]->text,$patArray,PREG_SET_ORDER)){
  if (is_array($patArray)){
    return($patArray[0][9]);
  }	
}
Danke für jeden Tip!
StartUpBoy ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.09.2007, 11:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo StartUpBoy,

wenn die Strings jeweils in einer Zeile stehen, kannst du das auch ohne RegExps lösen. Suche einfach nach dem letzten Doppelpunkt in der Zeile und trenne den Rest ab. Möchtest du das trotzdem mit RegExps lösen, solltest di dein Pattern dahingehend ändern, dass du den Teil vor und den Teil nach dem Doppelpunkt als jeweils eigene Teile deklarierst und im ersten Teil auch Klammern zulässt. In deinem ersten Patten müsstest du zudem die literalen Klammern escapen, da eine Klammer eine Sonderstellung in einem Pattern hat (Gruppierung).
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 01.09.2007, 11:54  
Benutzer
 
Registriert seit: 22.03.2005
Beiträge: 59
StartUpBoy
Standard

Hi...
Danke erstmal für deine Antwort...
Wie mache ich denn das richtig, die literalen Klammern escapen?
Und, behandele ich das Sonderzeichen ö so richtig?
StartUpBoy ist offline  
Alt 01.09.2007, 14:13  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo StartUpBoy,

das Escapen funktioniert, wie in ungefähr jeder Programmiersprache mit "\" (Backslash). Ein

Code:
\(\)
bedeutet dabei literale Klammern, Sonderfunktion erhalten sie durch blanke Verwendung:

Code:
()

Zitat:
Und, behandele ich das Sonderzeichen ö so richtig?
Diese kannst du in einer Liste von erlaubten Zeichen bereits mit

Code:
[A-Za-z]
einbeziehen, oder wenn du diese ausschließen möchtest einfach per

Code:
[A-Za-z^ö^ä^ü]
aus einer Zeichenklasse verbannen. Ein gutes Tutorial zu RegExps findest du unter http://www.devmag.net/webprog/regulaere_ausdruecke.htm.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 01.09.2007, 14:16  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Soweit ich sehe, hast Du die Klammern doch schon escaped. Wie sieht denn die Email um die beiden Zeilen herum aus? Falls Du die Zeilen irgendwie extrahieren kannst, dann würde sich EUR als Merkmal anbieten. Die Ziffer-Zeichen und ein Komma dahinter bilden dann den Preis. Etwa so:
PHP-Code:
preg_match_all ('#(?:EUR|€)\s*([0-9]+(?:,[0-9]{2})?)#' $string $found); 
nikosch ist gerade online  
Alt 01.09.2007, 18:04  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
dr.e hat es schon angesprochen, RegExp sind hier nicht nötig und viel zu überladen, wie ja dein Beispiel zeigt, zumindest um das ganze Ergebnis zu catchen. Mach es doch so, wie du den Betrag auch findest:
Nach "versand" suchen und dann den Betrag am Ende nehmen.

Geh die E-Mail also zeilenweise durch, teste mit stripos() ob in der Zeile "versand" vorkommt und catch dir dann mit preg_match() oder substr() den EUR-Betrag raus. Ist viel übersichtlicher und auch viel flexibler.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.