Top-Themen

Aktuelle Themen (A bis Z)

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 Preg match soll nach erster Übereinstimmung beendet werden

Mitglied: Lampux

Lampux (Level 1) - Jetzt verbinden

12.01.2011, aktualisiert 28.01.2011, 3494 Aufrufe, 13 Kommentare

Guten Tag,

da ich mir zurzeit die regulären Ausdrücke genauer anschaue und dazu ein paar Übungen mache, bin ich nun auf ein Problem gestoßen. Ich möchte mit preg_match eine bestimmte Stelle vom Quelltext suchen, und dessen Link auslesen. Jedoch kommt das Ende der Stelle im Quelltext öfters vor. Jedoch soll preg_match nach der ersten Übereinstimmung beendet werden, jedoch funktioniert das nicht. Preg_match geht den kompletten Quelltext durch und gibt alle Suchergebnisse bis zum Ende des Quelltextes aus. Hier der original Quelltext, ihr könnt ihn ja testen, falls ihr mir nun nicht richtig verstanden habt.





01.
<?php 
02.
 
03.
$link = "http://themen.t-online.de/news/baugewerbe"
04.
 
05.
$quelltext = file_get_contents($link); 
06.
preg_match("/ id=\"tscc\.hub\.1\.home\.title\" href=\".+\" class=\"tsc_restitle\"/",$quelltext,$img_tag); 
07.
$filter = htmlentities($img_tag[0]); 
08.
echo $filter
09.
?>
Es sollte einfach die Quelltextstelle von id="tsc.... bis class="tsc_restitle" ausgeben. Das id="tsc usw. würde ich dann später noch mit str_replace wegfiltern.

Vielleicht sieht ja einer von euch den Fehler

mfg Lampux
Mitglied: beckslevel91
12.01.2011 um 10:39 Uhr
Hallo Lampux,

ich glaube, dein Problem verstanden zu haben, und hätte folgende Lösung für Dich:

mit der Funktion "stripos" findest du das erste Vorkommen einer Zeichenkette in einem String. Da du weißt, wie lange die Zeichenkette ist, nach der du suchst machst du folgendes:

01.
$needle = '/ id=\"tscc\.hub\.1\.home\.title\" href=\".+\" class=\"tsc_restitle\"/'
02.
$erstePosition = stripos($quelltext, $needle); 
03.
$quelltext = substr($quelltext, 0, ($erstePosition + strlen($erstePosition));   //gibt nur noch den Teil übrigen Teil des Quelltextes aus
ist das das was du suchst? Bin mir nicht ganz sicher..

lg
Bitte warten ..
Mitglied: Lampux
12.01.2011 um 11:01 Uhr
Leider kommt bei deiner Lösung eine leere Seite. Kleine Anmerkung am Rande: in Zeile 3 fehlt am Schluss noch eine runde Klammer . Um das Problem ein bisschen genauer zu erklären:

Im Quelltext kommt diese Stelle einmalig vor. Von dieser Stelle aus, sollte es suchen:

id="tscc.hub.1.home.title" href="

bis zu dieser Stelle, die mehrmals im Quelltext vorkommt:

class="tsc_restitle"

Da diese Stelle mehrfach im Quelltext vorkommt, gibt er mit den ganzen Quelltext von Begin der ersten einmaligen Stelle bis zur letzen vorkommenden class="tsc_restitle" Stelle aus.

Ich möchte einfach nur, das das Gesuch nach dem ersten Finden von class="tsc_restitle" aufhört. Zwischen den beiden Stellen befinden sich ein Link, diesen möchte ich auslesen.

Ich hoffe nun das es ein wenig verständlich war

mfg Lampux
Bitte warten ..
Mitglied: beckslevel91
12.01.2011 um 11:09 Uhr
Hey. Jetzt versteh ich was du meinst. Okay, dann ist die Lösung recht einfach und ähnlich wie oben:

Du suchst das erste "id="tscc.hub.1.home.title" href="" im Quelltext mit "stripos".

Dann zerlegst du den Quelltext anhand dieser Position:

01.
 
02.
$quelltext = substr($stripos, strlen($quelltext)); 
03.
//jetzt hast du einen Quelltext der erst anfängt, wo der Link beginnt. 
04.
//damit kannst du einfach arbeiten: Suche das erste vorkommen von "class="tsc_restitle""
05.
$letztes_Zeichen = stripos('class="tsc_restitle"'); 
06.
$erstes_Zeichen = strlen('id="tscc.hub.1.home.title" href="'
07.
 
08.
$link = substr($quelltext, $erstes_Zeichen, $letztes_Zeichen); 
09.
 
Hats funktioniert ?

lg


PS: Hab mir dein Code nochmal angeguckt. Versuche, weniger zu escapen. Verwende doppelte und einfache Anführungsstriche, das macht es übersichtlicher. =)
Bitte warten ..
Mitglied: Lampux
12.01.2011 um 11:29 Uhr
Ich glaube wir sind nahe an der Lösung, leider wirft es noch eine Fehlermeldung:

Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\such3.php on line 11

Hier der aktuelle Quelltext:


01.
<?php 
02.
 
03.
$link = "http://themen.t-online.de/news/baugewerbe"
04.
$quelltext = file_get_contents($link); 
05.
$quelltext = substr($stripos, strlen($quelltext)); 
06.
//jetzt hast du einen Quelltext der erst anfängt, wo der Link beginnt. 
07.
//damit kannst du einfach arbeiten: Suche das erste vorkommen von "class="tsc_restitle""
08.
$letztes_Zeichen = stripos('class="tsc_restitle"'); 
09.
$erstes_Zeichen = strlen('id="tscc.hub.1.home.title" href="'
10.
 
11.
$link = substr($quelltext, $erstes_Zeichen, $letztes_Zeichen); 
12.
echo $link
13.
?>
Bitte warten ..
Mitglied: godlie
12.01.2011 um 11:57 Uhr
wie wärs mit einem ; in zeile 9 am ende ?
Bitte warten ..
Mitglied: Lampux
12.01.2011 um 13:03 Uhr
Stimmt! Leider kommt nun:

Warning: stripos() expects at least 2 parameters, 1 given in C:\xampp\htdocs\such3.php on line 8
Bitte warten ..
Mitglied: godlie
12.01.2011 um 13:09 Uhr
Dokuvorleseservice php.net/stripos
01.
int stripos ( string $haystack , string $needle [, int $offset = 0 ] )
Bitte warten ..
Mitglied: beckslevel91
12.01.2011 um 13:53 Uhr
Lösungsservice

01.
<?php  
02.
 
03.
$link = "http://themen.t-online.de/news/baugewerbe";  
04.
$quelltext = file_get_contents($link);  
05.
$quelltext = substr($stripos, strlen($quelltext));  
06.
//jetzt hast du einen Quelltext der erst anfängt, wo der Link beginnt.  
07.
//damit kannst du einfach arbeiten: Suche das erste vorkommen von "class="tsc_restitle"":  
08.
 
09.
$letztes_Zeichen = stripos($quelltext, 'class="tsc_restitle"');  
10.
$erstes_Zeichen = strlen('id="tscc.hub.1.home.title" href="'); 
11.
 
12.
$link = substr($quelltext, $erstes_Zeichen, $letztes_Zeichen);  
13.
 
14.
echo $link;  
15.
 
16.
?>
Bitte warten ..
Mitglied: godlie
12.01.2011 um 14:06 Uhr
Debugservice
01.
$stripos is not defined 
Bitte warten ..
Mitglied: beckslevel91
12.01.2011 um 14:21 Uhr


nobody's perfect^^

naja, das wird er jetzt wohl selbst hinbekommen
Bitte warten ..
Mitglied: Lampux
12.01.2011 um 17:26 Uhr
Danke Leute. Jedoch zeigt es mir immer noch eine weiße Seite an. Und mit dieser Meldung kann ich leider nichts anfangen:

$stripos is not defined
Bitte warten ..
Mitglied: dog
12.01.2011 um 19:53 Uhr
preg_match sucht im Gegensatz zu preg_match_all nur ein Vorkommen einer Code-Stelle und gibt das aus.
Du hast aber .+ geschrieben und die Funktion somit greedy gemacht.
Spricht: Er gibt alles vom ersten Vorkommen des Textes links vom .+ und alles bis zum letzen Vorkommen des Textes rechts von .+ aus.
Was du willst ist ungreedy: .+?
Bitte warten ..
Mitglied: Lampux
13.01.2011 um 07:39 Uhr
Genau das wollte ich. Vielen Dank, es funktioniert einwandfrei.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP Befehl preg match all
gelöst Frage von MatthiasKlein88PHP2 Kommentare

Schönen guten Morgen! Ich stoße derzeitig auf einem Problem bei dem Befehl "preg_match_all". Mein Ziel ist alle 11 in ...

PHP
Preg-replace mit Variablen nutzen
gelöst Frage von rzlbrnftPHP1 Kommentar

Ich möchte gerne ein kleines Joomla Tool umschreiben weil sich der Code für das preg_replace mittlerweile geändert hat. Es ...

Microsoft Office

Excel: Exakte Übereinstimmung finden

Frage von ralfkauskMicrosoft Office3 Kommentare

Hallo zusammen Ich bräuchte mal Hilfe bei einem Excel Problem. Ich habe eine Liste mit Benutzernamen Wie man sehen ...

Microsoft Office

Excel Daten vergleichen bei Übereinstimmung drucken

Frage von GregDanielsMicrosoft Office6 Kommentare

Hallo, ich steh grad auf dem Schlauch. Ich möchte eine Abfrage in Excel bauen und komme nicht weiter. Meine ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...