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

07-10-2010, 14:42
|
bweichel
Registrierter Benutzer
|
|
Registriert seit: Aug 2004
Beiträge: 452
|
|
regex bis zum ersten Vorkommen
Ich möchte aus dem String:
alles innerhalb der #-Zeichen extrahieren. Wenn es mehrere eingeschlossene Zeichenfolgen mit # gibt, sollte jeder Inhalt in ein Array liegen. Bisher habe ich nur die Zeichenfolge ab dem ersten #-Zeichen und dem letzten #-Zeichen mit folendem Code erhalten.
Kann mir jemand behilflich sein?
|

07-10-2010, 16:17
|
Wyveres
Registrierter Benutzer
|
|
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
|
|
|

07-10-2010, 16:20
|
pascal007
Registrierter Benutzer
|
|
Registriert seit: Jul 2006
Beiträge: 257
|
|
Geht es wirklich nur um die eingeschlossenen Werte?
Also: ?
|

07-10-2010, 16:21
|
matt_dominik
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 13
|
|
wenn ich das nun richtig verstanden habe suchst du das hier:
PHP - explode
|

07-10-2010, 21:47
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Zitat von matt_dominik
wenn ich das nun richtig verstanden habe suchst du das hier:
PHP - explode
|
Das würde aber auch 12345 finden. Wobei man natürlich das nullte und letzte Element auslassen könnte.
Ungreedy dürfte aber das gewünschte Ergebnis liefern, wie bereits vorgeschlagen.
|

07-10-2010, 22:05
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.781
|
|
Zitat:
Zitat von TobiaZ
Ungreedy dürfte aber das gewünschte Ergebnis liefern, wie bereits vorgeschlagen.
|
Nö, tut es nicht. Hab ich schon ausprobiert. Zumindest nur auf die Schnelle:
PHP-Code:
$str = '12345#1857#22#132454#2312';
preg_match_all('/#([0-9]{1,})#/U', $str, $hit, PREG_SET_ORDER);
print_r($hit);
unterschlägt hier die 22. Keine Ahnung warum, aber es ist auch schon spät.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

07-10-2010, 22:14
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Stimmt, weil die Raute zum vorherigen Ergebnis (1857) gehört und erst danach weiter gesucht wird.
Also entweder ein Pattern ohne U und # [edit]dafür mir backreferenz(?)[/ edit] oder aber explode mit auslassen der unerwünschten Ergebnisse.
Kommt drauf an, was genau diese Zeichenkette ist.
Geändert von TobiaZ (07-10-2010 um 22:17 Uhr)
|

07-10-2010, 22:14
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Zitat von Kropff
unterschlägt hier die 22. Keine Ahnung warum
|
Weil der Positions-„Zeiger“, ab dem weiter gesucht wird, nach dem Finden von #1857# bereits auf der ersten 2 der 22 steht, und damit der Ausdruck erst ab dem nächsten #, dem vor 132454, wieder fündig wird.
Da das # beim vorliegenden Ausdruck sowohl zum Ende des vorherigen als auch zum Beginn des nächsten (gewünschten) Treffers gehören würde, überschneiden sich die Suchtreffer - und sowas findet der reguläre Ausdruck nicht.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

07-10-2010, 22:24
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.781
|
|
Zitat:
Zitat von wahsaga
Weil der Positions-„Zeiger“, ab dem weiter gesucht wird, nach dem Finden von #1857# bereits auf der ersten 2 der 22 steht, und damit der Ausdruck erst ab dem nächsten #, dem vor 132454, wieder fündig wird.
|
Davon bin ich ausgegangen. Wollte aber zu so später Stunde keinen Blödsinn reden. Wie schon gesagt, es ist spät, meine Haare sind grau, meine Augen sind blind und Kreuzigung ist Firlefanz.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

08-10-2010, 00:23
|
bweichel
Registrierter Benutzer
|
|
Registriert seit: Aug 2004
Beiträge: 452
|
|
Hab`s jetzt fast... allerdings habe ich noch das Problem das ich die letzte Zeichenfolgen nicht in das Array bekommen... durch das , - Komma werden die Zeichen in Gruppen eingeteilt. Nun hat die letzte Gruppen kein Komma am Schluss... ich dachte ich könnte das durch ein | - oder lösen, aber da kommt nix...
String.
Zitat:
0001#1857,0002#244,ST 0023#3874
|
Regex:
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|