zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden preg_replace treibt mich in den Wahnsinn

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 27.03.2009, 16:48
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 06.02.2009
Beiträge: 23
olik befindet sich auf einem aufstrebenden Ast
Standard preg_replace treibt mich in den Wahnsinn

Hallo,
sitze nun seit heute morgen daran und komme einfach nicht weiter. Es geht darum, einen externen RSS-Feed einzulesen, ihn zu bearbeiten und lokal als Datei abzulegen. Keine Panik, die Rechte dazu habe ich vom Urheber!

Das ist also mein Code:
PHP-Code:
$koeln file_get_contents("http://rss.feedsportal.com/c/32139/f/416094/index.rss");
$koelnneu str_replace("<item><title>""<item><title>Köln - "$koeln);
$koelnneu preg_replace("\&lt;""" $koelnneu);
$myFile "koeln.xml";
$fh fopen($myFile'w') or die("can't open file");
fwrite($fh$koelnneu);
fclose($fh); 
Wie ihr seht, habe ich das mit "Köln - " vor jeden Titel schreiben bereits hinbekommen. Schaut euch den Ursprungs-RSS-Feed jetzt bitte mal an. Ich möchte gerne nur den ersten Satz haben in der Beschreibung, ab "Verwandter Inhalt" also alles weg haben.

Dieser Teil ist immer gleich aufgebaut:
Code:
&lt;img width='1' height='1' src='http://rss.feedsportal.com/
.....
</description>
(ja, das &lt; muss so, da es innerhalb der RSS-Beschreibung wohl keine Tags gibt... aber das ist wieder ein anderes Thema.

Nun möchte ich gerne das Fettgeschriebene entfernen und durch "" ersetzen. Von mir aus kann das </description> noch mit entfernt werden, das kann ich ja einfach wieder dranhängen.

Ich habe nun schon tausende Wildcard-Variationen probiert aber verstehe die Syntax immer nocht nicht so richtig. Bitte um eine Lösung!

Besten Dank!
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 27.03.2009, 17:28
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Aus dem Bauch heraus:
Code:
/&lt;img.*<\/description>/
Edit: du könntest das ganze auch über ein simpleXML-Objekt handhaben:

PHP-Code:
$koeln simplexml_load_file('http://....rss');

$channel $koeln->channel;

foreach (
$channel->item as $item) {
   
   
$item->title 'Köln - '.$item->title;
}
... 
__________________
github | http://dnaber.de

Geändert von David (27.03.2009 um 17:52 Uhr)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 27.03.2009, 19:11
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Besser wäre:
Code:
/&lt;img(?:[^<]+|<[^\/]+|<\/(?!description>))*<\/description>/
__________________
Markus Wulftange

Geändert von Gumbo (29.03.2009 um 23:49 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 28.03.2009, 13:02
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Der Ausdruck stellt sicher, dass er nicht über mehrere descriptions hinweg alles löscht, oder was bedeutet der?

"?:" und "?!" haben doch sicher auch spezielle bedeutung?
__________________
github | http://dnaber.de
Mit Zitat antworten
  #5 (permalink)  
Alt 28.03.2009, 14:25
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.776
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Zitat:
Zitat von David Beitrag anzeigen
Der Ausdruck stellt sicher, dass er nicht über mehrere descriptions hinweg alles löscht, oder was bedeutet der?
Wenn Du bei Deinem Ausdruck anstelle von .* (greedy) .*? (lazy) nutzt, verhinderst Du genauso, dass mehrere Descriptions betroffen sind.

Code:
/&lt;img.*?<\/description>/
Mit Zitat antworten
  #6 (permalink)  
Alt 28.03.2009, 21:28
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Zitat:
Zitat von David Beitrag anzeigen
"?:" und "?!" haben doch sicher auch spezielle bedeutung?
(?:expr) ist eine Gruppierung, dessen gefundene Übereinstimmung nicht referenziert werden kann. Und (?!expr) ist eine so genannte negative look-ahead assertion, also eine vorausschauende Zusicherung, die nicht erfüllt sein darf. </(?!description>) beschreibt also alle Vorkommen von </, denen kein description> folgen darf.
__________________
Markus Wulftange
Mit Zitat antworten
  #7 (permalink)  
Alt 28.03.2009, 22:58
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Danke. Wie sieht dann die negative look-behind-assertion aus? (?<!expr)
__________________
github | http://dnaber.de
Mit Zitat antworten
  #8 (permalink)  
Alt 28.03.2009, 23:02
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.776
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Zitat:
Zitat von David Beitrag anzeigen
Danke. Wie sieht dann die negative look-behind-assertion aus? (?<!expr)
Die Antwort hast Du Dir bereits selbst gegeben
Mit Zitat antworten
  #9 (permalink)  
Alt 28.03.2009, 23:07
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Na ja... ersetze das "ist-gleich" durch ein Ausrufezeichen.
Immer wenn ich denke, ich seh langsam ein System in den Reg_ex, kommt wieder was neues.
Warum ist denn die Negation von (?=expr) nun (?!expr) und nicht, wie etwa zu vermuten wäre (?=!expr). Erscheint mir unlogisch.
__________________
github | http://dnaber.de
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 28.03.2009, 23:18
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.776
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Du kannst das nicht zu 100% mit gleich und ungleich bei Programmiersprachen vergleichen. (== bzw. !=)

System hat es bei regulären Ausdrücken dennoch:

positive lookahead: (?=)
positive lookbehind: (?<=)

negative lookahead (?!)
negative loobehind (?<!)
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
im div wahnsinn: content div relativ zu browserhöhe lilalaune CSS 1 24.11.2010 19:55
Bitte um Hilfe, IE treibt mich in den Wahnsinn. morris CSS 2 30.12.2008 19:37
Wahnsinn SimonWpt Offtopic 1 17.01.2005 13:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:13 Uhr.