theunreal
Goto Top

Regex (Wert)UND(andererWert) verketten

Hallo zusammen,

ich hoffe der Titel ist einigermaßen gewählt face-smile.

Ich habe eine Frage zum REGEX verhalten. Ich durchsuche folgenden String:

:data
Hier ist ein Karton
Dong!
data:

Ich möchte nun in einer if-Abfrage prüfen, ob ein Match true ist:

if ($CheckedString -Match "(data:)?(:data)?" -eq $true)...  

Der Code matched immer, da er alles matched, eine ODER Verknüpfung bekomme ich ja mit dem Pipe hin, aber die matched dann ja auch, wenn nur ein "data" vorhanden ist.Wie sieht es mit einer und Verknüpfung aus? Gibt es das überhaupt?
Match darf nur true sein, wenn beide "data´s" vorhanden sind.

Sonst bastel ich das aus 2 if-Abfragen, aber mir wäre es lieber kompakter face-smile.

Ich hoffe mein Anliegen war verstänlich vorgetragen.
Liebe Grüße,
Sascha

Content-ID: 649662

Url: https://administrator.de/contentid/649662

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

147323
Lösung 147323 09.02.2021 aktualisiert um 10:37:18 Uhr
Goto Top
Match darf nur true sein, wenn beide "data´s" vorhanden sind.
Da gibt's mehrere Varianten z.B. einfach mit -and Operator verketten:
if($checkedString -match ':data' -and $checkedString -match 'data:'){  
 "OK"  
}
oder wenn du es in einem einzigen Regex haben willst und die Reihenfolge der Terme egal sein soll
if($checkedString -match '(?s)(:data.*data:|data:.*:data))'){  
 "OK"  
}
Sonst bastel ich das aus 2 if-Abfragen
Nee das ist nun wirklich nicht nötig. Solltest du vielleicht mal in einer ruhigen Minute lesen about_Logical_Operators
TheUnreal
TheUnreal 09.02.2021 um 10:51:39 Uhr
Goto Top
Super, vielen Dank für die Hilfe. Auf die Gruppe mit dem Sonderzeichen am Anfang wäre ich alleine nicht gekommen.

Gruß Sascha
147323
Lösung 147323 09.02.2021 aktualisiert um 11:01:23 Uhr
Goto Top
Zitat von @TheUnreal:

Super, vielen Dank für die Hilfe. Auf die Gruppe mit dem Sonderzeichen am Anfang wäre ich alleine nicht gekommen.
Das ist effektiv keine Gruppe sondern es ist ein spezieller Regex Konstrukt das besagt das der Punkt im Regex auch Zeilenumbrüche matchen soll (s) )
z.B. besagt
(?ism)
das insensitiv (i) gematcht werden soll, zusätzlich der Punkt auch Zeilenumbrüche matcht (s) und das (m) besagt das ^und $ im Regex Zeilenanfang und Zeilenende jeder Zeile matchen (multiline match) anstatt nur Anfang oder Ende des Strings.