SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 24.05.2007, 16:54:24
sareen sareen ist offline
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
Mit Zitat antworten
  #2  
Alt 24.05.2007, 17:27:39
lukgestach lukgestach ist offline
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
Mit Zitat antworten
  #3  
Alt 24.05.2007, 17:36:58
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: regular expression - Ausschluss eines Wortes

Zitat:
Zitat von lukgestach Beitrag anzeigen
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...
    
{

    } 
Mit Zitat antworten
  #4  
Alt 24.05.2007, 20:54:00
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #5  
Alt 24.05.2007, 21:01:32
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: regular expression - Ausschluss eines Wortes

Zitat:
Zitat von z0iD Beitrag anzeigen
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));
?>
Mit Zitat antworten
  #6  
Alt 24.05.2007, 21:09:05
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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
Mit Zitat antworten
  #7  
Alt 25.05.2007, 00:06:03
feuervogel feuervogel ist offline
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.
Mit Zitat antworten
  #8  
Alt 25.05.2007, 00:39:41
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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
Mit Zitat antworten
  #9  
Alt 25.05.2007, 04:55:57
sareen sareen ist offline
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)
Mit Zitat antworten
  #10  
Alt 25.05.2007, 19:11:36
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
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)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regular Expression Problem frx PHP Grundlagen 2 10.08.2006 02:17:57
Anzahl eines Wortes ermitteln? Malle666 PHP für Fortgeschrittene und Experten 14 10.04.2006 13:53:53


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:06:14 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.


© 2001-2025 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt