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 ::

TYPO3 Kochbuch

TYPO3 Kochbuch 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 für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 19.01.2005, 14:56:09
morsche morsche ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 50
regex Problem

morsche,

ich habe ein Problem mit meinem regex. Es findet einfach nicht das, was es soll.

Der zu durchsuchende String kann folgendermaßen aussehen:

|begriff: zahl, andererbegriff: anderezahl||nocheinbegriff: nocheinezahl, undnocheiner: undnocheine|

von den Begriffen bzw. Zahlen kann es 1-6 Stück geben - also kann ein String auch so aussehen:

|begriff: zahl, andererbegriff: anderezahl|

Ich möchte nun diese max. 6 Zahlen herausfiltern und abspeichern. Mein regex dafür sieht folgendermaßen aus:
(ist von der Länge her natürlich bis jetzt nur auf zwei Zahlen ausgelegt. Wenn ich versuche mehr Zahlen herauszufiltern bekomme ich nur Ausgaben, wenn mindestens so viele im String vorhanden sind.)

PHP-Code:
if(eregi(": (.*),.*: (.*),?|?.*",$string,$regs))
{
echo 
$regs[1]." ".$regs[2]." ".$regs[3]." ".$regs[4]." ".$regs[5]." ".$regs[6];

Dabei erhalte ich aber nur eine einigermaßen richtige Ausgabe, wenn im String nur zwei Begriff-Pakete drin sind:

zahl anderezahl|


Sind es mehr bekomme ich den gesamten String ab der ersten Fundstelle ausgegeben:

zahl, andererbegriff: anderezahl||nocheinbegriff: nocheinezahl, undnocheiner: undnocheine|...

hat jemand eine Ahnung, was ich da machen kann?
Mit Zitat antworten
  #2  
Alt 19.01.2005, 15:09:46
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Ist glaube ich nicht die beste Lösung, aber es ist eine:
PHP-Code:
<?php
$str
='|ASD1: 12, QWE1: 13||ASD2: 22, QWE2: 23||ASD3: 32, QWE3: 33|';

// Ohne Text
preg_match_all('/|.*: ([0-9]*), .*: ([0-9]*)|/ieU'$str$out);
print_r($out);

// Mit Text
preg_match_all('/|(.*): ([0-9]*), (.*): ([0-9]*)|/ieU'$str$out);
print_r($out);
?>
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #3  
Alt 19.01.2005, 15:23:48
morsche morsche ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 50
danke für die schnelle antwort. ich habe mich etwas ungenau ausgedrückt. die zahl darf nämlich auch zeichen enthalten also müsste man ja [0-9] einfach durch .* ersetzen.

aber wenn ich deinen code verwende komme ich trotzdem nicht dazu alle sechs kombinationen herauszufiltern.
Mit Zitat antworten
  #4  
Alt 19.01.2005, 15:25:07
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Na dann zeig mal Deine Strings. Warum was Neues ausdenken, wenn's dann eh falsch ist...
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #5  
Alt 19.01.2005, 15:30:47
morsche morsche ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 50
|Name1: XV5, Name2: LU550/5|

|Name1: XV20, Name2: LU331||Name1: XV20, Name2: WK712/2||Name1: XV20, Name2: LU329|
Mit Zitat antworten
  #6  
Alt 19.01.2005, 15:33:24
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Einfach so:
PHP-Code:
<?php
$str
='|Name1: XV20, Name2: LU331||Name1: XV20, Name2: WK712/2||Name1: XV20, Name2: LU329|';

preg_match_all('/|.*: (.*), .*: (.*)|/U'$str$out);
print_r($out);

preg_match_all('/|(.*): (.*), (.*): (.*)|/U'$str$out);
print_r($out);
?>
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #7  
Alt 19.01.2005, 15:44:32
morsche morsche ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 50
ok ok, ich habs ein bisschen verpeilt, dass sich dieser |...| Block ja ständig wiederholt.

Aber: wenn man jetzt mal davon ausgeht, dass das nicht so ist, also dass diese "|" nur ganz unregelmäßig in dem String vorkommen, wovon ich ausgegangen bin... wie macht man das dann bzw. wieso hat diese expr nicht funktioniert?

: (.*),?|?.*
Ich dachte das heißt:
Erst Doppelpunkt mit Leerzeichen
Dann mein Wert
Dann Komma oder | oder beides oder nichts
Dann wieder egal bis zum nächsten Doppelpunkt usw.

Das würde doch auch auf den String passen?!

Aber auf jeden Fall vielen Dank - das hat mir ne Menge Arbeit erspart.
Mit Zitat antworten
  #8  
Alt 19.01.2005, 15:50:19
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Mir ist gerade aufgefallen, dass mal wieder die verschluckt wurden. So ist's eigentlich gemeint:
Code:
<?php
$str='|Name1: XV20, Name2: LU331||Name1: XV20, Name2: WK712/2||Name1: XV20, Name2: LU329|';

preg_match_all('/|.*: (.*), .*: (.*)|/U', $str, $out);
print_r($out);

preg_match_all('/|(.*): (.*), (.*): (.*)|/U', $str, $out);
print_r($out);
?>
Zitat:
Original geschrieben von morsche
Aber: wenn man jetzt mal davon ausgeht, dass das nicht so ist, also dass diese "|" nur ganz unregelmäßig in dem String vorkommen, wovon ich ausgegangen bin... wie macht man das dann bzw. wieso hat diese expr nicht funktioniert?

: (.*),?|?.*
Ich dachte das heißt:
Erst Doppelpunkt mit Leerzeichen
Dann mein Wert
Dann Komma oder | oder beides oder nichts
Dann wieder egal bis zum nächsten Doppelpunkt usw.

Das würde doch auch auf den String passen?!
Der Gedankengang ist verständlich, er scheitert aber an den .* Woher soll der Ausdruck denn wissen, dass .* nur bis zum nächsten Doppelpunkt gelten soll?
Reguläre Ausdrücke sind Mustererkennungen (geiles Wort). Gibt es kein sich wiederholendes Muster, dann hast Du auch keine Chance. Behaupte ich jetzt mal.
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #9  
Alt 19.01.2005, 15:54:40
morsche morsche ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 50
na wenn ich meinen Ausdruck 6 Mal hintereinander hänge, müsste er doch wissen, nur bis zum nächsten ":"

Also so:

: (.*),?|?.*: (.*),?|?.*: (.*),?|?.*: (.*),?|?.*: (.*),?|?.*: (.*),?|?.*

Zumindest muss man das ja mit eregi so machen. Mit preg_match_all muss man ja nur einmal das sich wiederholende Muster angeben und es wird so oft gesucht, wie möglich, wenn ich das richtig verstanden habe.
Mit Zitat antworten
  #10  
Alt 19.01.2005, 16:21:09
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Hab's mal mit Deiner Idee versucht. So klappt's:
Code:
<?php
$str='|Name1: XV20, Name2: LU331||Name1: XV20, Name2: WK712/2||Name1: XV20, Name2: LU329|';

preg_match_all('/|.*: (.*), .*: (.*)||.*: (.*), .*: (.*)||.*: (.*), .*: (.*).*|/', $str, $out);
print_r($out);
?>
Aber sind wir mal ehrlich: das sieht doch widerlich aus... ;)
__________________
sic!
--> http://dbCF.de/
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


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


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


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