• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

RegExp geklammerte Bereiche finden

inceddy

New member
Hi,
mal wiedern tolles Problem mit RegExp
angenommen ich etw. folgenden String
Code:
element(name){
  inhalt(name){ blub }
  inhalt(name){ blub }
  inhalt(name){ blub }
}
element(name){
  inhalt(name){ blub }
  inhalt(name){ blub }
  inhalt(name){ blub }
}
Wie bekomme ich es hin das ich 2mal den inhalt der element {} bekomme. Und nicht alles bzw. zuwenig .. also die } des inhalts soll nicht als ende des element angesehen werden.

Hoffe man konnte verstehen was ich will ^^
Danke im Voraus
 
Ich versuche das Problem vielleicht nochmal etw. deutlicher zu machen:
ich möche eine suchwort vorgeben (z.B. element) und dann sollen in dem String alle stellen gefunden werden die mit element{ starten und mit } aufhören, allerdings sollen innerhalt der geschweiften Klammern alle geschlossenen klammern ignoriert werden die mit einem anderen begriff starten.
Also in:
Code:
element{
  inhalt{ blubb }
}

soll
Code:
inhalt{ blubb }
und nicht
Code:
inhalt{ blubb
gefunden werden
 
Und was ist mit

Code:
element 
{
  subelement 
  {
    subsub
    {
    
    }
  }
}

Ist das auch zulässig?
Ich würde in einer schleife über den string gehen und die {}-paare suchen. (gehe ab "element {" zur 1. "}" für die es keine "{" gibt)
 
Jo das ist auch zulässig. Ich dachte eigentlich ich setz die funtion auf alle teilstrings an bis ich den letzten gefunden hab. Also ich will mich von außen nach innen vorarbeiten, weil der name des geklammerten bereichs also element oder subelement .. entscheidend sind für die verarbeitung von dem was er gefunden hat.
Mir würde es schon helfen wenn ich mit regExp außschließen kann das ein begriff innerhalb des strings vorkommt.
Dann könnte ich einen String suchen lassen der mit element{ beginnt und mit }auhört, aber kein "element" mehr enthält.
 
Wie wär's mit rekursiven RegExp:
PHP:
<?php
preg_match("/\\{([^{}]|(?R))*\\}/", "element 
{
  subelement 
  {
    subsub
    {
    
    }
  }
}", $erg);

print_r($erg)

?>
 
Zurück
Oben