[Regex] String zwischen String und Zeichen bekommen

Krikus

Mitglied
Hallo,

ich stelle mich wohl gerade etwas zu blöd an.
Ich habe folgenden beispielhaften String

Code:
blablabla={ddfdfdff=dfdf}#Rule-Install={Rule-Name=Rulenummer1}blablablabl

Aus diesem STring möchte ich per regex "Rulenummer1" bekommen.

Mit dem folgendenen regulären Audruck bekomme ich nicht das gewünschte Ergebniss.

Code:
^({Rule-Name=)(.*?)}$

Was ist an dem regulären Ausdruck falsch?

Gruß
Krikus
 

Spyke

Premium-User
du musst bei der verwendung mit Punkt "." aufpassen da dies ja für ein beliebiges Zeichen steht.

Ich denke ich würde es eher so versuchen:
Code:
({Rule-Name=)(\w*)}
sprich er soll explizit nach alphanumerisch suchen.

Ich würde auch nicht zum beginn ^ und zum ende hin auch nicht $ angeben.
Das besagt ja das dein zu durchsuchender Text im prinzip nur Ruler-Name enthält was laut deinem Beispiel ja nicht der Fall ist.

(Bin mir nur grad nicht sicher ob man nicht auch noch die geschweifte Klammer und das istgleich Zeichen escapen sollte)
 

ComFreek

Mod | @comfreek
Moderator
Beim Gleichheitszeichen braucht man sicher kein Escape.
Aber bei den geschweiften Klammern wird es interessanter. Zumindest in JS funktioniert /test{blub}/.test("test{blub}");, obwohl die Grammatik für reg. Ausdrücke in ECMAScript einen PatternCharacter so definiert:
Code:
PatternCharacter ::
  SourceCharacter but not one of
  ^ $ \ . * + ? ( ) [ ] { } |
SourceCharacter ist so definiert:
Code:
SourceCharacter ::
  any Unicode code unit
Eigentlich müsste dann /test{blub}/ (in ECMAScript) kein gültiger regulärer Ausdruck sein.
 

Yaslaw

alter Rempler
Moderator
Wie meine Vorredner schon anmerkten. { ist ein Sonderzeichen. ^+$ sind hier Kontraproduktiv.
Du willst sowas haben
Code:
\{([\w-_]+)=([\w-_]+)\}

Mein Test.
(Ps. Diese 2 Funktionen sind eigenfabrikate, eignen sich aber sehr gut zum austesten im Direktfenster: rx_match() und print_r())

Visual Basic:
print_r rx_match("\{([\w-_]+)=([\w-_]+)\}" , "blablabla={ddfdfdff=dfdf}#Rule-Install={Rule-Name=Rulenummer1}blablablabl",rxglobal)
<IMatchCollection2>  (
    [0] => <IMatch2>  (
        [Match] => <String> '{ddfdfdff=dfdf}'
        [FirstIndex] => <Long> 10
        [0] => <String> 'ddfdfdff'
        [1] => <String> 'dfdf'
    )
    [1] => <IMatch2>  (
        [Match] => <String> '{Rule-Name=Rulenummer1}'
        [FirstIndex] => <Long> 39
        [0] => <String> 'Rule-Name'
        [1] => <String> 'Rulenummer1'
    )
)

Die erste Klammer kannst du natürlich durch dein Rule-Name ersetzen, wenn du den bereits kennst