Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Hilfe bei einem Regex benötigt

Hallo,

ich bin in Sachen Reguläre Ausdrück leider nicht sehr fit. Ich möchte den kompletten Inhalt eines bestimmten div-Elements in einer Webseite ersetzen. Also z.B.

Code:                   In Zwischenablage kopieren (nur IE)
1">

Bei der Suche soll als Erkennungsmerkmal die CSS-id des div's sein, also im Beispiel "abc". Zudem soll es egal sein, wie der restliche Inhalt des div's aussieht (z.B. <div id="abc" style=".." >...< / div >). Könnte mir hier jemand weiter helfen? ;o)

Ich scheitere leider bei meinen Versuchen. Das hatte ich bisher:

Code:                   In Zwischenablage kopieren (nur IE)
2">

Danke schon mal !

Rufnex
Hier gehts zum Orginal Eintrag "Hilfe bei einem Regex benötigt" im Forum

Antworten

Das koennte funktionieren:
Code:                   In Zwischenablage kopieren (nur IE)
3">

Aber eigentlich empfehle ich fuer HTML immer XPath statt Regular Expressions. XPath ist simpler und zuverlaessiger. Dein Problem laesst sich damit ganz einfach loesen:
Code:                   In Zwischenablage kopieren (nur IE)
4">

http://de2.php.net/manual/de/function.dom-domdocument-loadhtmlfile.php
http://de2.php.net/manual/de/function.dom-domxpath-query.php


2.

Ich würde preg_replace nehmen.
\s ist "any whitespace character", also nur Leerzeichen etc; ".*" passt wohl eher.

Code:                   In Zwischenablage kopieren (nur IE)
5">

edit: Kann man das eigtl nicht auch mit JS machen?


3.

@--blubb--: Danke für den Tipp . das funktioniert so ganz wunderbar!

@pekos: Auch für Deinen Tipp danke. Könnst Du mir - für einen Laien - die beiden Ausdrück mal kurz erklären, also was da genau gesucht wird und passiert.


4.

[^>] steht fuer jedes beliebige Zeichen ausser ">". Das hab ich vor und hinter id="abc" benutzt, um beliebige andere Attribute zuzulassen. Das /div> am Ende hab ich weggelassen, weil ich angenommen hab diese DIVs enthalten bloss Text und keinen weiteren Markup. Das muesstest du also gegebenfalls ergaenzen. Der i-Modifier macht das Ganze case-insensitive und der s-Modifier sorgt dafuer, dass der Punkt auch Zeilenumbrueche erfasst. Standardmaessig sind Regexe naemlich nicht text- sondern zeilenorientiert.

Der XPath ist eigentlich zu schlicht um ihn zu erklaeren. Lies dir stattdessen mal das hier durch:

http://www.w3schools.com/xpath/xpath_syntax.asp


5.

Danke für die Info! Jetzt wird mir langsam einiges klarer ... ich muss da wohl mal üben. Danke!


6.

Ähm . ein Problem hab ich nun doch noch. Wenn ich den Ausdruck so erweitern möchte, damit es Alternativen gibt, wie muss ich das notieren?

Also z.B. soll div oder p oder textarea gefunden werden?

Danke


7.

Ersetze in der Regex:
Code:                   In Zwischenablage kopieren (nur IE)
6">

durch:
Code:                   In Zwischenablage kopieren (nur IE)
7">




8.

Ich nochamal ;o) Wenn ich folgendes notiere, dann klappt es, sofern die Daten sich zw. einem div-Tag befinden.

Code:                   In Zwischenablage kopieren (nur IE)
8">

Wenn ich den Ausdruck nun aber felexibler habe möchte und auch p, textarea, etc. berücksichtigen möchte, veruschte ich das hier:

Code:                   In Zwischenablage kopieren (nur IE)
9">

Das klappt aber irgendwie nicht? *kopfrauch*

Habt Ihr nochmal nen Tipp für mich?

Danke


9.

Mit den eckigen Klammern gibt man Alternativen fuer einen einzigen Buchstaben an. [div|p|textarea] funktioniert also nicht. Um alternative Strings anzugeben, benutzt man runde Klammern:
Code:                   In Zwischenablage kopieren (nur IE)
10">

Ausserdem brauchst du einen Back-reference (\1) um dafuer zu sorgen, dass opening-tag und closing-tag zueinander passen.

Entschudige, dass ich drauf rumreite, aber mit XPath waer auch das einfacher:
Code:                   In Zwischenablage kopieren (nur IE)
11">




10.

Code:                   In Zwischenablage kopieren (nur IE)
12">

Das müsste in runde Klammern, eckige Klammern sind für Charakterklassen; [ab]{1} passt zB auf "a" oder "b".

s.a. http://www.php-resource.de/tutorials/read/10/1 ;)

edit: o, zu spät.


11.

Vielen Dank, jetzt klappt es so wie ich es wollte! Und ja, ich geb Dir recht XPath sieht recht einfach aus. Ich werde mich damit mal intensiv beschäftigen.


12.

Oki . ich verspreche es .. die letzte Frage zu meinem Problem ;o) Wenn ich einen String ersetzte, der eine " enthält, wird dieses Zeichen maskiert \" .. wie kann ich sowas unterdrücken?


13.

Sind bei dir vielleicht "Magic Quotes" eingeschaltet?
[doc]get_magic_quotes_gpc[/doc]


14.

Ja, die sind wohl eingeschaltet, aber ein set_magic_quotes_runtime(0) hilft da auch nicht weiter.


15.

magic_quotes_gpc und magic_quotes_runtime haben wenig miteinander zu tun! magic_quotes_gpc werden bereits in der Startphase des Skripts, wenn die Arrays $_GET, $_POST und $_COOKIE bevoelkert werden, angewendet. Die kann man also nur in der php.ini abschalten. Man kann sie aber rueckgaengig machen mit stripslashes().
[doc]stripslashes[/doc]


16.

Klappt bestens, Danke nochmal .. ähm ja, morgen sollte auch mein bestelltes PHP-Buch ankommen ;o)


Hier gehts zum Orginal Eintrag "Hilfe bei einem Regex benötigt" im Forum
 
phpforum.de | Impressum | Handy Bundles