CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos

|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP 
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |

24.05.2007, 16:54:24
|
Anfänger
|
|
Registriert seit: May 2007
Beiträge: 3
|
|
regular expression - Ausschluss eines Wortes
Hallo Forum,
mit
Code:
preg_replace('#<!--.*-->#Us','',$html)
entferne ich alle Kommentare in meinem HTML Code. Das klappt auch ganz gut. Nun möchte ich Kommentare mit dem Wort "TEST" nicht entfernen. Ich bekomme es aber nicht hin.
würde mich total über einen Hinweis freuen.
beste Grüße
Sareen
|

24.05.2007, 17:27:39
|
Junior Member
|
|
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 33
Beiträge: 255
|
|
AW: regular expression - Ausschluss eines Wortes
Hallo
So könnte es gehen:
PHP-Code:
if(!strpos('<!--TEST-->', $html)
{
preg_replace('#<!--.*-->#Us','',$html)
}
Gruss Lukas
|

24.05.2007, 17:36:58
|
Junior Member
|
|
Registriert seit: Jun 2004
Beiträge: 473
|
|
AW: regular expression - Ausschluss eines Wortes
Zitat:
Zitat von lukgestach
So könnte es gehen:
PHP-Code:
if(!strpos('<!--TEST-->', $html)
{
preg_replace('#<!--.*-->#Us','',$html)
}
|
...aber nur wenn $html lediglich eine Zeile des Quelltextes enthält. Falls $html eine komplette Webseite enthält, wird das so nicht funktionieren, denn strpos() gibt immer nur eine Fundstelle zurück, wenn ich mich nicht irre.
In jedem Fall muss die if-Zeile anders lauten, denn strpos() gibt nicht "true", sondern die Fundstelle zurück.
PHP-Code:
if(strpos(...)!==false) // Wenn der Begriff in den Klammern gefunden wurde, mach...
{
}
|

24.05.2007, 20:54:00
|
 |
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: regular expression - Ausschluss eines Wortes
Die Sprache die Du beschreiben möchtest ist nicht regulär, kann also von einem regulären Ausdruck nicht beschrieben werden.
Allein <!--.*--> dürfte schon nicht funktionieren wenn man mehr als einen Kommentar hat, da die Automaten die das umsetzen gierig sind.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|

24.05.2007, 21:01:32
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: regular expression - Ausschluss eines Wortes
Zitat:
Zitat von z0iD
Die Sprache die Du beschreiben möchtest ist nicht regulär, kann also von einem regulären Ausdruck nicht beschrieben werden.
Allein <!--.*--> dürfte schon nicht funktionieren wenn man mehr als einen Kommentar hat, da die Automaten die das umsetzen gierig sind.
|
*hust*
PHP-Code:
<?php
$html = "<h2>hallo <!-- das ist ein kommentar --> </h2>";
echo htmlentities(preg_replace('#<!--([^T][^E][^S][^T])*-->#Us','',$html));
?>
|

24.05.2007, 21:09:05
|
 |
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: regular expression - Ausschluss eines Wortes
*hust* zurück, was ist dann mit
<!--TESA-->
Was Du da beschreibst ist eine Behelfslösung zu der ich auch gelegentlich greife. Aber perfekt ist es beiweitem nicht. Wie gezeigt erkennt das Wörter nicht die es eigentlich erkennen sollte.
TESA ist nur ein Beispiel. was ist mit "dies is ein TEST". wird ebenfalls nciht erkannt, da der Kleene Abschluss 4 mal durchlaufen werden muss, am Ende steht aber etwas was er nicht akzeptieren soll, aber sollte.
P.S.: Im Übrigen erkennt er Dein Beispiel nur, weil die Länge kongruent zu 0 mod 4 ist.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
Geändert von z0iD (25.05.2007 um 00:51:07 Uhr)
Grund: Korrektur
|

25.05.2007, 00:06:03
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: regular expression - Ausschluss eines Wortes
mein *hust* bezog sich auf das geschwafel mit dem automaten.
1. gibt es keine gefräßigen automaten.
2. kann ich die oben gewünschte sprache mit einem endlichen automaten erzeugen, also ist sie regulär (also alles, was mit <!-- anfängt, mit --> aufhört, aber das wort enthält nicht TEST).
Daher wird es auch einen regulären Ausdruck geben, über den ich die Tage mal nachdenke.
|

25.05.2007, 00:39:41
|
 |
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: regular expression - Ausschluss eines Wortes
Jap, das ist mir grade auch aufgefallen. Die Sprache ist tatsächlich regulär.
Hab da wohl nicht ausreichend drüber nachgedacht. Der Ausdruck ist sogar relativ einfach;
Code:
<!--((.{0,3})|(.{5,})|([^T]...)|(.[^E]..)|(..[^S].)|(...[^T]))-->
Ich entschuldige mich nochmal für den Müll den ich vorhin fabriziert habe.
P.S.: Die Länge des Ausdrucks hängt natürlich jetzt quadratisch von der Länge des auszuschließenden Wortes ab.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
Geändert von z0iD (25.05.2007 um 00:43:48 Uhr)
Grund: Ergänzung
|

25.05.2007, 04:55:57
|
Anfänger
|
|
Registriert seit: May 2007
Beiträge: 3
|
|
AW: regular expression - Ausschluss eines Wortes
Hi,
vielen Dank für eure Hilfe, leider funktioniert es so noch nicht ganz.
Code:
<!--((.{0,3})|(.{5,})|([^T]...)|(.[^E]..)|(..[^S].)|(...[^T]))-->
... wenn ich das richtig lese und getestet habe, dann entfernt es alle Kommentare, die entweder:
- weniger als 4 Zeichen lang sind,
- länger als 4 Zeichen lang sind,
- und die die genau 4 Zeichen lang sind, sofern sie nicht genau auf "TEST" lauten.
Ich wollte aber auch
<!--TEST nummer 1--> und <!--ein einfacher TEST--> entfernen.
was haltet ihr von:
Code:
'#<!--(([^T]...)|(.[^E]..)|(..[^S].)|(...[^T]))(.*)-->#Us'
... das macht so fast was ich will. Es erkennt alle Kommentare, die "TEST" nicht am Anfang haben. ... wenn allerdings for dem "TEST" was anderes steht, dann klappt es schon wieder nicht.
Echt vertrackt diese Reguläre Ausdrücke.
Noch ne' Idee?
Sareen
Geändert von sareen (25.05.2007 um 05:03:40 Uhr)
|

25.05.2007, 19:11:36
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: regular expression - Ausschluss eines Wortes
http://de.php.net/preg_replace_callback
PHP-Code:
function wunschzettel($test) { return ($test[1] == 'TEST') ? 'TEST' # die Zeichenkette TEST wird durch TEST ersetzt. : ''; # der Rest wird durch '' ersetzt }
$text = preg_replace_callback('#<!--(.*)-->#Us', 'wunschzettel', $text);
So oder so ähnlich.
Geändert von meikel (†) (25.05.2007 um 22:52:03 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:06:14 Uhr.
|