php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 28-03-2006, 07:53
bajana
 Junior Member
Links : Onlinestatus : bajana ist offline
Registriert seit: Nov 2005
Beiträge: 59
bajana ist zur Zeit noch ein unbeschriebenes Blatt
Standard Wer kann mir bei diesem regulären ausdruck helfen?

Ich bastle gerade an einem Regulären Ausdruck rum und komme nicht weiter. Ich möchte erkennen, wie oft in einem Text eine Tabelle vor kommt, mit dem Layout wie im Kommentar. Dazu will ich abfragen, wie oft <TABLE (irgendwas außer </TABLE>)</TABLE> vorkommt, weil mit <TABLE.*</TABLE> kommt immer nur 1 als Ergebnis zurück.
Kann mir jemand helfen?
PHP-Code:
/*<TABLE style=\"WIDTH: 335px; HEIGHT: 96px\" cellSpacing=2 cellPadding=2 border=1><TBODY>
<TR>
<TD><BR></TD>
<TD><BR></TD>
</TR><TR>
<TD><BR></TD>
<TD><BR></TD>
</TR>
</TBODY></TABLE>*/
preg_match_all("/<TABLE[^(<\/TABLE>)]*<\/TABLE>/"$text$tabellen);
$anz1 count ($tabellen[0]);
echo 
$anz1
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 28-03-2006, 11:18
phoboslab
 Newbie
Links : Onlinestatus : phoboslab ist offline
Registriert seit: Mar 2006
Beiträge: 32
phoboslab ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das liegt daran, dass dein regexp ( um genau zu sein, das * ) greedy ( gefräßig) ist. es matcht so viel es kann - vom ersten <table> bis zum _letzten_ </table>!
ein fragezeichen sagt dem sternchen das es non-greedy arbeiten soll, also nur so viel matcht, wie es unbedingt muss um das regexp zu erfüllen.

/<TABLE(.*?)</TABLE>/
Mit Zitat antworten
  #3 (permalink)  
Alt 28-03-2006, 11:22
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Naja, das macht nicht das ? sondern der Modifier "U"

PHP-Code:
"/<table[^(</table> )]*</table>/Ui" 
U = Ungreedy
i = case insensitive
Mit Zitat antworten
  #4 (permalink)  
Alt 28-03-2006, 11:49
bajana
 Junior Member
Links : Onlinestatus : bajana ist offline
Registriert seit: Nov 2005
Beiträge: 59
bajana ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ihr seit spitze! Danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 28-03-2006, 12:02
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von prego
Naja, das macht nicht das ? sondern der Modifier "U"

PHP-Code:
"/<table[^(</table> )]*</table>/Ui" 
U = Ungreedy
i = case insensitive
Beides hat den selben effekt. Siehe auch manpages zu pcre.
Von daher hat phoboslab also ebenso recht.


greets

//EDIT hier der entsprechende auszug aus der manpage
Zitat:
However, if a quantifier is followed by a question mark, it ceases to
be greedy, and instead matches the minimum number of times possible, so
the pattern ...
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

Geändert von closure (28-03-2006 um 12:08 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 28-03-2006, 13:57
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Oh, das war mit neu...

Danke
Mit Zitat antworten
  #7 (permalink)  
Alt 28-03-2006, 15:25
Luke
 Registrierter Benutzer
Links : Onlinestatus : Luke ist offline
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 623
Luke ist zur Zeit noch ein unbeschriebenes Blatt
Standard

> [^(</table> )]*

geht das wirklich? IMHO nicht, kriegs aber irgendwie auch nicht getestet
Mit Zitat antworten
  #8 (permalink)  
Alt 28-03-2006, 15:27
bajana
 Junior Member
Links : Onlinestatus : bajana ist offline
Registriert seit: Nov 2005
Beiträge: 59
bajana ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Luke
> [^(</table> )]*

geht das wirklich? IMHO nicht, kriegs aber irgendwie auch nicht getestet
Ne, das geht nicht, aber mit "/<TABLE.*<\/TABLE>/Ui" gehts.
Mit Zitat antworten
  #9 (permalink)  
Alt 28-03-2006, 15:34
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

phoboslab hat doch schon eine gute lösung gezeigt.
Zu beachten ist, dass hier nested tables nicht so erkannt werden
wie man es vll möchte. Ausserdem sind die modifier s und m notwendig. Optional kann man noch i angeben.

Code:
/<table>(.*?)<\/table>/ims
greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #10 (permalink)  
Alt 28-03-2006, 15:39
Luke
 Registrierter Benutzer
Links : Onlinestatus : Luke ist offline
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 623
Luke ist zur Zeit noch ein unbeschriebenes Blatt
Standard

m? Brauchste doch nicht


Schade dass das mit dem [^(text)] nicht geht, das wär ja die Entdeckung des jahrhunderts
Mit Zitat antworten
  #11 (permalink)  
Alt 28-03-2006, 15:40
bajana
 Junior Member
Links : Onlinestatus : bajana ist offline
Registriert seit: Nov 2005
Beiträge: 59
bajana ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von closure
Hi,

phoboslab hat doch schon eine gute lösung gezeigt.
Zu beachten ist, dass hier nested tables nicht so erkannt werden
wie man es vll möchte. Ausserdem sind die modifier s und m notwendig. Optional kann man noch i angeben.

Code:
/<table>(.*?)<\/table>/ims
greets
nested Tables wird es nicht geben, verwende bereits die Lösung von oben, trotzdem lief die Diskussion weiter, ist ja auch interessant, noch mehr über das Thema zu wissen, aber was Du über die modifier m und s schreibst verstehe ich nicht, ich habe dazu folgendes auf http://www.php-resource.de/tutorials/read/10/1/ gefunden:

Zitat:
s
Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen - das Pattern wird hierbei also nicht auf die ganze Zeichenkette bezogen, sondern jede Zeile einzeln behandelt

m
Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.

Die Modifier können beliebig kombiniert werden, s und m zusammen machen allerdings wenig Sinn.
Mit Zitat antworten
  #12 (permalink)  
Alt 28-03-2006, 16:03
Luke
 Registrierter Benutzer
Links : Onlinestatus : Luke ist offline
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 623
Luke ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Tutorial ist voll der Dreck, ließ hier mal:

http://www.php.net/manual/de/referen....modifiers.php
Mit Zitat antworten
  #13 (permalink)  
Alt 28-03-2006, 16:08
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
s
Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen - das Pattern wird hierbei also nicht auf die ganze Zeichenkette bezogen, sondern jede Zeile einzeln behandelt

m
Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.

Die Modifier können beliebig kombiniert werden, s und m zusammen machen allerdings wenig Sinn.
Hmm das ist mir neu. m sucht über mehre zeilen und s bewirkt dass der punkt-operator auch newlines matched. Wieso schliessen sich
beide aus ? Ich bekomme jedenfalls bei suchen über mehrere zeilen
nur ergebnisse wenn ich beide modifier verwende.


//EDIT nachtrag:
ich will ja nichts sagen, aber das pcre tutorial ist nicht so gut.
hier wieder der auszug aus der manpage
Zitat:
modifier description Perl corresponding

PCRE_CASELESS case insensitive match /i
PCRE_MULTILINE multiple lines match /m
PCRE_DOTALL dot matches newlines /s
greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

Geändert von closure (28-03-2006 um 16:10 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 28-03-2006, 16:27
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen
Das ist m.E. schlichtweg Quark.

Wie du schon sagtest, sorgt der Modifier s dafür, dass der Punkt auch Newlines matcht. Deshalb ja auch der Name PCRE_DOTALL.
Zitat:
Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.
Auch diese Beschreibung taugt wenig bis gar nichts.

Das PHP-Manual beschreibt es m.E. besser und genauer:
Zitat:
Standardmäßig behandelt PCRE eine zu durchsuchende Zeichenkette wie eine einzige Zeile von Zeichen (auch wenn sie tatsächlich mehrere Zeilenumbrüche enthält). Das Metazeichen für einen Zeilenanfang (^) passt nur auf den Anfang der Zeichenkette, das Metazeichen für ein Zeilenende ($) nur auf das Ende der Zeichenkette (falls der Modifikator D nicht gesetzt ist). [...] Wenn dieser Modifikator gesetzt ist, passen die Zeilenanfang- und Zeilenende-Konstrukte in der Zeichenkette sowohl direkt nach, bzw. vor einem Zeilenumbruch als auch auf deren Anfang und Ende.
Zitat:
Original geschrieben von closure
Wieso schliessen sich beide aus ?
Tun sie nicht.

Sie bewirken beide etwas (größtenteils) unabhängiges.

Auch m als "Komplement" zu s zu bezeichnen, halte ich für Unfug.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #15 (permalink)  
Alt 28-03-2006, 16:38
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von wahsaga
Tun sie nicht.

Sie bewirken beide etwas (größtenteils) unabhängiges.

Auch m als "Komplement" zu s zu bezeichnen, halte ich für Unfug.
Ich hab schon an mir gezweifelt.

greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Formmailer v1.7.0 Bootstrap 4

Formmailer v1.7.0 Bootstrap wurde extra für Bootstrap entwickelt. Mit Bootstrap kann man schnell und einfach kleine oder große Projekte entwickeln, die auf Geräten in allen erdenklichen Formen funktionieren.

16.04.2020 arne-home | Kategorie: PHP/ Formular
Upload v1.1.0 Bootstrap

Mit dem PHP - Uploadscript kann man schnell und einfach Bilder und Dateien auf den Webserver hochladen.

16.04.2020 arne-home | Kategorie: PHP/ File
Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:57 Uhr.