PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Regexp: Alles ohne ZEICHENKETTE (http://www.selfphp.de/forum/showthread.php?t=23725)

Time-Over 05.11.2010 23:08:42

Regexp: Alles ohne ZEICHENKETTE
 
Moin,
ich versuch jetzt schon seit einigen Stunden eine Regexp für folgenden Fall zu finden:
Code:

/*Group:MyGroupName*/
ganzvieltextmitzeichenaußer*/
/*end*/

Das hab ich jetzt schon geschrieben. Aber es liefert mir keine Ergebnisse.
/Group:(^(?!\\*\\/)+)\\*\\/(^(?!\\/\\*)*)\\/\\*/
Rot: Alles außer */
Blau: Alles außer /*

Ich brauch also MyGroupName und den ganzvieltextmitzeichenaußer*/ in 2 Variablen.
Wie kann ich dieses Problem lösen?

mfg

Time-Over

Ckaos 06.11.2010 01:28:46

AW: Regexp: Alles ohne ZEICHENKETTE
 
Hi

Zitat:

Wie kann ich dieses Problem lösen?
/*Gemeinan*/ Mit einer Lösung. /*Gemeinaus*/
Zitat:

/Group:(^(?!\\*\\/)+)\\*\\/(^(?!\\/\\*)*)\\/\\*/
Rot: Alles außer */
Blau: Alles außer /*
Kann ich 0 nachvollziehen wie du dazu kommst, welche Quellen
nutzt du?

Ich könnte dir natürlich den richtigen schreiben, das hat aber
kein Lerneffekt für dich. Also zeige ich dir wie du an solche Aufgaben rangehen kannst.

step by step
1.Du willst alles nach /*Group:
- * ist ein reserviertes Zeichen muss also escaped werden
Dein Regex also
Code:

'~/\*Group:(.*)~s'
Ausgabe:
Code:

Array ( [0] => Array ( [0] => /*Group:MyGroupName*/ ganzvieltextmitzeichenaußer*/ /*end*/ ) [1] => Array ( [0] => MyGroupName*/ ganzvieltextmitzeichenaußer*/ /*end*/ ) )
2.Du willst begrenzen bis */
- an * denken
Code:

'~/\*Group:([^\*/]*)~s'
Ausgabe:
Code:

Array ( [0] => Array ( [0] => /*Group:MyGroupName ) [1] => Array ( [0] => MyGroupName ) )
....nun du nen schritt...dann helf ich wieder ;()

Zwischengedanke: Warum nutze ich ~ als Delimiter?
Weil ich keine Lust habe meinen Delimiter 100mal zu escapen ;)
siehe zu 2. mit / als Delimiter
Code:

/\/\*Group:([^\*\/]*)/s
mfg

CKaos

Time-Over 06.11.2010 14:24:59

AW: Regexp: Alles ohne ZEICHENKETTE
 
Okay es gibt da nur noch ein kleines Problem bei deinem Ansatz. Einen "funktionierenden" Ansatz mit diesem Problem hatte ich nämlich auch schon. Entschuldige dass ich diesen nicht gleich gepostet habe.

Code:

/Group:([^\\*\\/]+)\\*\\/([^\\/\\*]*)/
Das Problem ist nämlich, dass sowohl bei Klammer 1 als auch bei Klammer 2 keine Zeichen * und / vorkommen dürfen. Aber eigentlich möchte ich ja nur die Zeichenfolge */ bzw /* verbieten. Ich habe im Internet einen Ansatz mit (?!\\*\\/) gefunden, aber der funktioniert nicht. Die Aufgabenstellung ist also
bei Klammer 1: "Alle Zeichen außer Zeichenkette */"
und bei Klammer 2: "Alle Zeichen außer Zeichenkette /*"

Und das ist das Problem für das ich einfach keine Lösung auf die Beine bekomme.
Vielleicht kannst du mir jetzt besser weiterhelfen?

mfg

Time-Over

Ckaos 06.11.2010 17:21:23

AW: Regexp: Alles ohne ZEICHENKETTE
 
Hi

Zitat:

Und das ist das Problem für das ich einfach keine Lösung auf die Beine bekomme.
Vielleicht kannst du mir jetzt besser weiterhelfen?
Wie kann ich dir helfen wenn du nichtmal siehst das ich dir schon den
ersten teil vorgeschrieben/gelöst habe. Anscheinend beinhaltet dein
gewünschtes Ergebnis weitere Vorgaben die du hier enthälst.

Vielleicht (mit Glaskugel) bringt dich der Ansatz weiter
PHP-Code:

$str="/*Group:MyGro*u/pName*/
ganzvieltextmitzeichenaußer*/
/*end*/"
;
preg_match_all("/\/\*Group:(.*)\*\//Us",$str,$erg);
print_r($erg); 

mfg

CKaos

Time-Over 06.11.2010 22:55:31

AW: Regexp: Alles ohne ZEICHENKETTE
 
Abend,
tut mir leid dass ich einige wichtige Punkte vergessen habe. Also nochmal von 0. Ich habe einen string der folgendermaßen aussieht:

/*Group:Nahrung*/
kuchen,eis+apfel*essen
/*Group:Gebäude*/
{ein geb*äude, haus. kirche / bauernhof
/*Group:Bäume*/
eiche/birke&
/*end*/

Ich brauche nun ein Array[count][2] (count in diesem Fall 3)
wobei Array[count][0] den jeweils rot markierten Wert beinhaltet
und Array[count][1] den blau markierten

Dein Ansatz im vorherigen Post bringt mich leider nicht weiter, da er ja dann alle vorherkommenden */ bzw /* mitaufnimmt.


//EDIT:
Okay mit dem /Us hinten gehts =) Danke dir!!! Werd gleich mal googlen was es sich damit auf sich hat. Das kannte ich bisher noch garnicht.
Ansatz:
Code:

"/Group:(.+)\\*\\/(.*)\\/\\*/Us"


-closed-

mfg

Time-Over

cortex 08.11.2010 11:12:51

AW: Regexp: Alles ohne ZEICHENKETTE
 
Zitat:

Zitat von Time-Over (Beitrag 138877)
Werd gleich mal googlen was es sich damit auf sich hat.

alternativ die forensuche nutzen; zum thema reguläre ausdrücke habe ich schon x-mal tutorials u.ä. verlinkt.

cx

Time-Over 08.11.2010 13:10:44

AW: Regexp: Alles ohne ZEICHENKETTE
 
Zitat:

Zitat von cortex (Beitrag 138895)
alternativ die forensuche nutzen; zum thema reguläre ausdrücke habe ich schon x-mal tutorials u.ä. verlinkt.

cx

Mit den RegExp kenn ich mich ja aus^^ Aber von dem /Us hab ich noch nie was gehört.

mfg

Time-Over

cortex 08.11.2010 13:19:59

AW: Regexp: Alles ohne ZEICHENKETTE
 
Zitat:

Zitat von Time-Over (Beitrag 138903)
Mit den RegExp kenn ich mich ja aus

dein wort in gottes gehörgang.

cx


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:49:24 Uhr.

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