hawkmaster: Hilfe bei regulärem Ausdruck gesucht

Hallo zusammen,
ich lese eine Textdatei in einen String und durchsuche diese dann nach bestimmten Vorkommen.
Beispiel:
*OpenUI *StapleLocation/Staple: ...
...
*CloseUI: *StapleLocation

Das klappt z.b. mit dem Ausdruck: In der Variablen $element steht das Wort "StapleLocation"

  
if (preg_match_all("#\*OpenUI\s+\*".$element."(/(.*?):|:)\s?(.*?)\*CloseUI[^ ]*: \*".$element."#s", $string1, $contents)){  

Jetzt gibt es aber auch Dateien, wo vor dem Wort "StapleLocation" auch noch zwei Großbuchstaben stehn:

*OpenUI *FIStapleLocation/Staple:

Das klappt dann mit:

  
elseif (preg_match_all("#\*OpenUI \*[A-Z]{0,2}".$element."(/(.*?):|:) (.*?)\*CloseUI: \*[A-Z]{0,2}".$element."#s", $string1, $contents)){  

Und nochmals welche vor vor "StapleLocation" noch 3 Großbuchstaben gefolgt von 2 Zahlen kommen.
*OpenUI *NUP23StapleLocation/Staple:

Das klappt dann mit: (die Großbuchstaben sind mir bekannt und stehen in $prefix)

  
elseif (preg_match_all("#\*OpenUI \*".$prefix."[0-9]{2,}".$element."(/(.*?):|:)(.*?)\*CloseUI: \*".$prefix."[0-9]{2,}".$element."#s", $string1, $contents)){  

Ich suche nach einer Möglichkeit, wo man einen einzigen Ausdruck für alle Varianten verwenden kann.

Ich dachte ich könnte mit \S* vor der Variablen $element erreichen, dass auch WhiteSpace Zeichen (keinmal oder mehrmals) erlaubt sind.

if (preg_match_all("#\OpenUI\s+\\S*".$element."(/(.*?):|:)\s?(.*?)\CloseUI[^ ]*: \\S*".$element."#s", $string1, $contents)){

So aber wird mir bei;
*OpenUI *StapleLocation/Staple:

sowohl "Staple" als auch "StapleLocation" gefunden obwohl ja nur das Letztere richtig wäre.

Hat jemand eine Idee für einen Ausdruck?

vielen Dank und viele Grüße
hawk

  1. Hat jemand eine Idee für einen Ausdruck?

    Dein Ziel ist es jetzt, was genau zu finden - deine Erklärung hat mich mehr verwirrt als es vermutlich ein paar Zeilen getan hätten die es zu finden gilt,

    *OpenUI *StapleLocation/Staple: ...
    ...
    *CloseUI: *StapleLocation

    *OpenUI *FIStapleLocation/Staple:

    *OpenUI *NUP23StapleLocation/Staple:

    *OpenUI *StapleLocation/Staple:

    Was willst du hier jetzt genau finden?

    1. Hallo suit,

      sorry für meine ungenaue Erklärung.

      Ich suche einen Ausdruck der
      für alle drei Situationen zutrifft. Wenn ich also das Wort "StapleLocation" habe und danach suchen möchte.

      *OpenUI *StapleLocation/Staple: ...

      *OpenUI *FIStapleLocation/Staple:

      *OpenUI *NUP23StapleLocation/Staple:

      In allen 3 Varianten kommt ja das Wort vor.

      vielen Dank und viele Grüße
      hawk

      1. sorry für meine ungenaue Erklärung.

        Ich suche einen Ausdruck der
        für alle drei Situationen zutrifft. Wenn ich also das Wort "StapleLocation" habe und danach suchen möchte.

        *OpenUI *StapleLocation/Staple: ...

        *OpenUI *FIStapleLocation/Staple:

        *OpenUI *NUP23StapleLocation/Staple:

        In allen 3 Varianten kommt ja das Wort vor.

        Dh du willst nach folgendem Suchen:

        "*OpenUI *" oder "*OpenUI *FI" (bzw. zwei andere Buchstaben) oder "*OpenUI *NUP23" (bzw. drei Buchstaben und zwei Ziffern) gefolgt von "StapleLocation/Staple:"

        Oder drückst du dich unklar aus und du willst eigentlich vollständige Zeilen finde, die mit diesen Ketten beginnen?

        1. Hi,

          Dh du willst nach folgendem Suchen:

          "*OpenUI *" oder "*OpenUI *FI" (bzw. zwei andere Buchstaben) oder "*OpenUI *NUP23" (bzw. drei Buchstaben und zwei Ziffern) gefolgt von "StapleLocation/Staple:"

          Ja genau,
          Ja genau. Ich weiss das in ALLEN Textdateien die Zeilen mit *OpenUI anfangen.

          vielen Dank und viele Grüße
          hawk

          1. Dh du willst nach folgendem Suchen:

            "*OpenUI *" oder "*OpenUI *FI" (bzw. zwei andere Buchstaben) oder "*OpenUI *NUP23" (bzw. drei Buchstaben und zwei Ziffern) gefolgt von "StapleLocation/Staple:"

            Ja genau,
            Ja genau. Ich weiss das in ALLEN Textdateien die Zeilen mit *OpenUI

            Und jetzt weiß ich immer noch nicht, wie eine vollständige Zeile ausieht und welchen Teil davon du wirklich brauchst.

            Gibt es Zeilen die mit *OpenUI beginnen und StapleLocation nicht beinhalten, was kommt hinter dem Doppelpunkt? Willst du etwa das, was nach dem Doppelpunkt kommt? Willst du die Buchstaben und Zahlen vor StapleLocation - sprich mit mir.

            Einen Auszug aus so einem File und eine Beschreibung, was du eigentlich finden willst würde hier wesentlich mehr helfen als ein paar müde antworten.

            Eventuell geht das dann auch relativ einfach mit Zeichenkettenfunktionen indem du die Files einfach zeilenweise durchratterst - das kommt schlichtweg auf die Anforderung an, die ich jetzt immer noch nicht kenne.

  2. Hallo,

    ein Ausdruck der dem Nahe kommt was ich bisher deinen Ausführungen entnehmen konnte:

    \OpenUI\s+\([^/\s]*ELEMENT/([^:\s]+)):\s*(.*?)\s*\CloseUI:\s+\\1

    "ELEMENT" entsprechend durch PHP Variable ersetzen.

    Hinweis: Erzeugt ein zusätzliches Element im Ergebnis-Array für *Ausdruck:

    1. Hallo
      vielen Dank für deine Hilfe.

      ich muss den Ausdruck noch ausprobieren.
      Nur mal zum Verständnis:

      [^/\s]*

      \s steht ja eigentlich für Whitespace Zeichen oder? Wird das durch das ^ wieder negiert? Könnte man dann nicht gleich \S für Nicht-Whitespace Zeichen schreiben?
      und,  warum noch der Slash / ?

      vielen Dank und viele Grüße
      hawk