Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 08:39

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



RegExp Verschachtelung

Discussion on RegExp Verschachtelung within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
RegExp Verschachtelung

Hallo,
ich habe gerade ein kleines aber doch großes Problem welches ich nicht durch Google finden konnte bzw. nicht die Lösung

Ich habe z.B. folgenden String: (er wird hier komischerweise falsch dargestellt bzw. voll verkrüppelt)
So, ich kann jetzt Problemlos nach LIST und /LIST suchen, dann würde ich aber entweder auf das erste /LIST treffen, oder das aller letzte /LIST
Ich finde aber nicht das nur dazugehörige.
Kennt jemand dafür eine Lösung?
Am besten eine PHP freundliche?

MfG
Mr.Tr33
Mr.Tr33 is offline  
Old 01/29/2015, 18:25   #2
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
Nicht mit einfachem preg_match suchen, sondern mit preg_match_all. Dann kriegst du ein Array mit allen Treffern zurück.
.StarSplash is offline  
Old 01/29/2015, 19:26   #3

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Dies ist mir bewusst.
Wenn ich folgenden Pattern benutze: \[list\](.*?)\[/list\]
Dann bekomme ich das wieder:
Code:
[LIST][*]a[*][LIST][*]hans[*]peter[*]baum[/LIST]
Wenn ich aber diesen Pattern benutze: \[list\](.*)\[/list\]
Dann bekomme ich einfach alles wieder, was ich ihm als String gegeben habe, weil es eben mit
  • anfängt und
endet.
Mr.Tr33 is offline  
Old 01/29/2015, 19:53   #4
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Du versuchst, eine kontextfreie Sprache mit einem regulären Ausdruck zu beschreiben. Das ist nur in speziellen Fällen möglich; wenn die Sprache nicht nur kontextfrei, sondern auch regulär ist. Das ist aber in deinem Fall nicht so.

Mit anderen Worten: Es gibt keine Lösung allein mit regulären Ausdrücken für dein Problem.

Du könntest es mit einem rekursiv absteigenen Parser versuchen, ein solcher ist in der Regel recht einfach zu schreiben.
Davon abgesehen hast du nicht dein Ziel genannt, nur den Weg.
Tasiro is offline  
Old 01/29/2015, 19:59   #5

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Quote:
Originally Posted by Tasiro View Post
Mit anderen Worten: Es gibt keine Lösung allein mit regulären Ausdrücken für dein Problem.
Könntest du mir vielleicht ein Beispiel dazu geben bitte?

Quote:
Originally Posted by Tasiro View Post
Du könntest es mit einem rekursiv absteigenen Parser versuchen, ein solcher ist in der Regel recht einfach zu schreiben.
Davon abgesehen hast du nicht dein Ziel genannt, nur den Weg.
Ich möchte am Ende dass es das erste LIST mit demzweiten /LIST als ein Paar sieht, das zweite LIST und das erste /LIST und dann halt das 3te LIST und das 3te /LIST als ein Paar. Sprich die dazugehörigen Teile und nicht einfach die als erstes, egal von welcher Richtung, im Weg stehen.
Mr.Tr33 is offline  
Old 01/29/2015, 20:19   #6
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
Dann ist das mal wieder ein Paradebeispiel für nen Stack ;o
Damit erreicht du genau das.
.StarSplash is offline  
Thanks
1 User
Old 01/30/2015, 20:03   #7
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by Mr.Tr33 View Post
Könntest du mir vielleicht ein Beispiel dazu geben bitte?
Standardbeispiel: Sei L = {aⁿbⁿ : n∈ℕ, n≠0}, die Sprache der Wörter ab, aabb, aaabbb usw. Es muss also für jedes a genau ein b vorhanden sein. Das lässt sich nicht mit einem endlichen Automat realisieren, da bei m Zuständen spätestens bei dem m+1. a wieder ein Zustand eingenommen wird, der sich von einem bereits vorher angenommenen Zustand nicht unterscheiden lässt.
Damit lässt sich das nicht mit einem DEA und damit auch nicht mit einem regulären Ausdruck beschreiben.

Dein Problem ist ähnlich, bei dir können zwischen jedem [LIST]-[/LIST]-Paar nicht nur ein weiteres Paar stehen, sondern mehrere, dazu noch anderer Text. Das macht die Aufgabe natürlich nicht einfacher.


Quote:
Originally Posted by Mr.Tr33 View Post
Ich möchte am Ende dass es das erste LIST mit demzweiten /LIST als ein Paar sieht, das zweite LIST und das erste /LIST und dann halt das 3te LIST und das 3te /LIST als ein Paar. Sprich die dazugehörigen Teile und nicht einfach die als erstes, egal von welcher Richtung, im Weg stehen.
Warum möchtest du die Paare paaren?

Wenn du einen Baum deiner Paare erstellen möchtest, könntest du das etwa so machen:
Code:
function parseCode (code, ref i)
    if code contains "[i]" at index i then
        i += length of "[i]"
        result = new BBCode ("i", parseCode (code, i))
        if code contains "[/i]" at index i then
            i += length of "[/i]"
        else
            writeErrorMessage ("missing [/i] at index " + i)
        end if

    else if ... // andere Fälle
        ...
    end if
end function
Oder du nutzt eine der vielen Bibliotheken dafür. Du musst bloß nach "BB Code Parser" und der gewünschten Sprache suchen.
Tasiro is offline  
Old 02/01/2015, 03:01   #8
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Quote:
Originally Posted by Tasiro View Post
Du versuchst, eine kontextfreie Sprache mit einem regulären Ausdruck zu beschreiben. Das ist nur in speziellen Fällen möglich; wenn die Sprache nicht nur kontextfrei, sondern auch regulär ist. Das ist aber in deinem Fall nicht so.

Mit anderen Worten: Es gibt keine Lösung allein mit regulären Ausdrücken für dein Problem.
Reguläre Ausdrücke in Programmiersprachen sind in der Regel nicht regulär, sondern wesentlich mächtiger. In PHP gibt es sogar rekursive reguläre Ausdrücke, mit denen der TE sein Problem lösen können sollte.
dowhile is offline  
Thanks
1 User
Old 02/01/2015, 14:12   #9

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Quote:
Originally Posted by dowhile View Post
Reguläre Ausdrücke in Programmiersprachen sind in der Regel nicht regulär, sondern wesentlich mächtiger. In PHP gibt es sogar rekursive reguläre Ausdrücke, mit denen der TE sein Problem lösen können sollte.
Ein Beispiel wäre dabei immer hilfreich

Quote:
Originally Posted by Tasiro View Post
Warum möchtest du die Paare paaren?
Ich möchte diese paaren damit ich beim kürzen des Codes (damit ich z.B. nur 800 Zeichen anzeigen lassen kann) es am Ende richtig anzeigen lassen kann.
Mr.Tr33 is offline  
Old 02/01/2015, 15:26   #10
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by dowhile View Post
rekursive reguläre Ausdrücke
Interessant, was die sich alles einfallen lassen. Nur ist das hierfür nicht unbedingt eine gute Idee...

Quote:
Originally Posted by Mr.Tr33 View Post
Ein Beispiel wäre dabei immer hilfreich

Und noch ein paar mehr Links zu dem Thema:

Tasiro is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
String Between | String regexp
06/07/2013 - AutoIt - 7 Replies
Huhu, undzwar habe ich ein problem hiermit: <li class="lab">Benutzername:</li> <li>Salmor</li> ich will salmor auslesen, wenn ich allerdings sage: $Benutzername = _StringBetween($sHTML, 'Benutzername:</li><li>', '</li>') kommt es zu keiner Lösung, evtl kann mir jemand helfen.
StringSplit mit RegExp
03/27/2013 - AutoIt - 7 Replies
Hi, ich versuche gerade einen Text in seine Sätze zu zerteilen. Ist es möglich das man mit StringSplit oder StringRegExp Texte splittet und als trennzeichen "!","?" und "." nimmt ? Weiterhin will ich das nach einer dieser zeichen ein Großbuchstabe folgen muss. Würde das gehen bzw. wie ?
[S] JavaScript RegExp Datum Pattern [B] 5 E*Gold
08/05/2012 - elite*gold Trading - 2 Replies
^Topic Suche ein JavaScript Pattern was mir ein deutsches Datum prüft. Also:TT.MM.JJJJ Einfach Pattern hier in den Thread schreiben. Der, der mir das beste Pattern Liefern kann wird mit 5 E*Gold belohnt. Da ich gleich Off muss (19:00) und am Di weg bin, fälle ich die Entscheidung wer den besten Pattern mir geliefert hat wahrscheinlich erst am Mi. Heißt:Auch erst am Mittwoch gibts die 5 E*Gold.
If-Then-Verschachtelung
08/11/2011 - AutoIt - 1 Replies
Hallo, Ich würde gerne eine Verschachtelung durchführen. While True If WinExists("leben","Fehlermeldung&qu ot;) Then WinClose("leben","Fehlermeldung&quo t;) If WinExists("Mozilla-Absturz-Melder") Then MouseClick("left", 856, 571, 1, 0) Then MouseClick("left", 856, 571, 1, 0)
[Help] How do I change RegExp for skills?
08/22/2010 - CO2 Private Server - 8 Replies
my sactter skill get up very fast levels how do I edit the skill exp requirment? source 5165



All times are GMT +1. The time now is 08:39.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.