Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Textphrasen auslesen

Frage Entwicklung PHP

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

01.07.2013 um 14:10 Uhr, 1598 Aufrufe, 16 Kommentare, 3 Danke

Hallo Gemeinde,

ich benötige mal einen kleinen Denkanstoß:

Ich möchte einen Text durchsuchen und bestimmte Stellen/Wörter in Variablen speichern.

Beispielsweise soll der Name der angesprochenen Person gefunden werden:

"Sehr geehrter Herr <-NACHNAME->,"

Ich muss dem System also erzählen, dass es das, was zwischen "Sehr geehrter Herr " und "," steht, in eine Variable packen soll.

Könnt ihr mir ein Stichwort geben, in welche Richtung ich mich durchlesen muss? Ich steh grad echt vor der Wand...


Danke!!
Gruß
Maik87
Mitglied: dog
01.07.2013, aktualisiert um 14:18 Uhr
Könnt ihr mir ein Stichwort geben

Reguläre Ausdrücke

und wenn du es ernst meinst:
  • Chomsky-Hierarchie (speziell Typ 0 / 1)
  • Lexer & Parser
  • flex & bison
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 14:19 Uhr
Zitat von dog:
Reguläre Ausdrücke
Danke!


und wenn du es ernst meinst:
  • Chomsky-Hierarchie
  • Lexer & Parser
  • flex & bison
Klingt umfangreich

Mir geht es nur darum, dass eine Webanwendung außer einer Emailschnittstelle nichts zu bieten hat und ich die Informationen aus den Email auslesen möchte. Diese sind immer gleich aufgebaut - ich muss nur an den richtigen Stellen lesen.
Bitte warten ..
Mitglied: SlainteMhath
01.07.2013 um 14:49 Uhr
Moin,

Diese sind immer gleich aufgebaut - ich muss nur an den richtigen Stellen lesen.
Dann kommst Du evtl. mit Zeilenzählen substr() und strpos() am schnellst ans Ziel

lg,
Slainte
Bitte warten ..
Mitglied: colinardo
01.07.2013, aktualisiert um 15:17 Uhr
Hallo Maik87,
hier ein Beispiel mit RegEx:
01.
$anrede = "Sehr geehrter Herr Meier,"
02.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),/i',$anrede,$matches); 
03.
$name = $matches[2][0]; 
04.
echo $name;
Grüße Uwe
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 15:21 Uhr
Super Uwe,

vielen Dank!!

Genau das habe ich gesucht - läuft prima.

Ich schau mal, ob ich das auf alle weitere umgebogen bekomme


Gruß
Maik87
Bitte warten ..
Mitglied: Maik87
01.07.2013, aktualisiert um 15:48 Uhr
Ich hänge schon

Habe dem Script die nächste Schwierigkeitsstufe gegeben - zwei Anreden:
01.
$anrede = "Sehr geehrter Herr Meier, Sehr geehrte Frau Schulz,"; 
02.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),/i',$anrede,$matches); 
03.
$name = $matches[2][0]; 
04.
echo $name .'<br>';
Leider sieht die Ausgabe nun so aus:
01.
Meier, Sehr geehrte Frau Schulz,
Wie bringe ich ihm noch bei, dass bei dem Komma Schluss ist und alles, was danach kommt, mich nicht mehr interessiert?

Wie bekomme ich die zweite Anrede auch ausgelesen? Das Array beinhaltet nur den ersten Treffer. Ein nochmaliges Ausführen von preg_match_all liefert exakt das gleiche Ergebnis.



Edit:
01.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),./i',$anrede,$matches);
Beendet das Auslesen nach dem Komma.

Bleibt nur noch der zweite Treffer
Bitte warten ..
Mitglied: colinardo
01.07.2013, aktualisiert um 16:28 Uhr
01.
$string = "Sehr geehrter Herr Meier, Sehr geehrte Frau Schulz,"
02.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),/iU',$string,$matches); 
03.
echo "Bei einer Anrede Name = " . $matches[2][0] . <br>; 
04.
echo "Name 1 bei zwei Anreden = " . $matches[2][0] . "<br>"
05.
echo "Name 2 bei zwei Anreden = " . $matches[2][1] . "<br>";	 
06.
 
Bitte warten ..
Mitglied: dog
01.07.2013, aktualisiert um 16:01 Uhr
/Sehr geehrter? (Herr|Frau) (?<NAME1>[^,]*),$|Sehr geehrter? (Herr|Frau) (?<NAME1a>[^,]*), ?Sehr geehrter? (Herr|Frau) (?<NAME1b>.*),$/i

O_o

Psssst, Geheimtipp: Das Stichwort heißt ungreedy
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 16:14 Uhr
Zitat von dog:
Psssst, Geheimtipp: Das Stichwort heißt ungreedy

DANKE!!!

01.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),/iU',$anrede,$matches);
01.
print_r($matches[2]);
Alles drin
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 16:28 Uhr
Kann mir jetzt noch jemand sagen, woran ich festmache, wieviele Dimensionen $matches haben wird?

01.
$anrede = "Sehr geehrter Herr Meier, sehr geehrte Frau Schulz, in Ihrem Schreiben vom 01.07.2013 teilten Sie uns mit..."; 
02.
preg_match_all('/Sehr geehrter? (Herr|Frau) (.*),/iU',$anrede,$matches);
Hier liegt mein gesuchter Wert in $matches[2][0].

01.
$anrede = "Sehr geehrter Herr Meier, sehr geehrte Frau Schulz, in Ihrem Schreiben vom 01.07.2013 teilten Sie uns mit..."; 
02.
preg_match_all('/Schreiben vom (.*) teilten/iU',$anrede,$matches);
Hier jedoch in $matches[1][0].
Bitte warten ..
Mitglied: colinardo
01.07.2013, aktualisiert um 16:34 Uhr
oben ist der erste Match bei (Herr|Frau) und unten ist dein Match der erste, weil erstes Klammerpaar.

bitte erst mal lesen:
http://de3.php.net/manual/de/function.preg-match-all.php

denke der Thread ist beantwortet...http://www.administrator.de/faq/32
merci
Bitte warten ..
Mitglied: dog
01.07.2013 um 16:36 Uhr
$matches[1][0].

Die erste Zahl ist die Capture Group:
0 = der ganze Match
1 = der inhalt vom 1. Klammerpaar ganz links
2 = usw.

Die zweite Zahl ist der Index des Treffers.

Sehr geehrter Herr Meier, sehr geehrte Frau Schulz
erzeugt 2 Treffer mit den Nummern 0 und 1.
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 16:36 Uhr
Zitat von colinardo:
oben ist der erste Match bei (Herr|Frau) und unten ist dein Match der erste, weil erstes Klammerpaar.
Sprich ich muss die Klammern zählen, um die Dimension zu kennen?


Hab ich - aber entweder keine Lösung gefunden oder diese nicht richtig gedeutet
Bitte warten ..
Mitglied: Maik87
01.07.2013 um 16:38 Uhr
Zitat von dog:
0 = der ganze Match
1 = der inhalt vom 1. Klammerpaar ganz links
2 = usw.

Der hat gefehlt, DANKE!!


Die zweite Zahl ist der Index des Treffers.

> Sehr geehrter Herr Meier, sehr geehrte Frau Schulz
erzeugt 2 Treffer mit den Nummern 0 und 1.

Das hatte ich schon verstanden Ich suchte nur die Logik, wie die erste Dimension nummeriert ist.
Bitte warten ..
Mitglied: Maik87
02.07.2013 um 10:21 Uhr
Ich hänge wieder

Unzwar geht es gerade darum, eine Textphrase, welche sich über mehrere Zeilen erstreckt, auszulesen.

Ich bin inzwischen so weit:
01.
/Artikelbezeichnung: *(.*)\n/iU
Liest bis Zeilenende.


01.
/Artikelbezeichnung: *(.*)http/iU
Würde bis http lesen, wenn dieses in der gleichen Zeile steht. Es soll nun aber alle Zeilen lesen, bis es auf http stößt.

Wo ist der Trick?
Bitte warten ..
Mitglied: colinardo
02.07.2013, aktualisiert um 10:27 Uhr
Mit der Option s sollte der Punkt auch einen Zeilenumbruch(carriage return) mit einschließen
01.
/Artikelbezeichnung: *(.*)http/isU
Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...