Welche Wörter sind valide in diesem RegEx?

3 Antworten

Gruppierung "()" spielt in diesem Fall keine Rolle.

  • 0+ mindestens ein Zeichen "0"
  • 1 gefolgt von genau einem Zeichen "1"

Da kein Positionsbezug angegeben ist, matched es auch innerhalb umgebender Zeichen(ketten): 01,0001 ,1001 , Muh00001,Rumpel 001 Stilzchen

wenn Du es testen möchtest, hier ein kleines Powershellscript:

$TestPattern = '(0+1)'


$TestStrings = @(
    '01',
    '254',
    '111',
    '0001',
    '1001',
    'Blubb',
    'Muh00001',
    'Rumpel 001 Stilzchen'
)


Write-Host "TestPattern: $TestPattern"
$TestStrings|
    ForEach-Object{
        if ($_ -match $TestPattern){
            Write-Host "String : $_  is  matching"  -fo green
            Write-Host "Group1 matches: $($Matches.1)" -fo yellow
        }
        else{ Write-Host "No Match in $_" -fo red}
    }
pause

kleine Übersicht : https://www.regexe.de/hilfe.jsp

PS: auch ei string wie "blubb0011" würde matchen, obwohl auf die 0en mehr als eine "1" folgen. Das hängt damit zusammen, dass das Pattern keine definierten umgebenden Begrenzungen enthält . die Nachfolgende "1" ist somit nicht Teil dessen, was "(0+1)" matched!

havefunidont  03.05.2024, 16:59

Das ist meines Wissens nach falsch. Das + bedeutet oder. Du verwechselst das + mit dem hoch +. 0^+ würde bedeuten mindestens eine oder mehr nullen.

0
naitram22  03.05.2024, 21:08
@havefunidont

Das dachte ich auch. Es gibt allerdings verschiedene Notationen. Wenn du in UNIX oder einer RegEx engine Reguläre Ausdrücke angibst, werden andere Zeichen benutzt.

1
Erzesel  03.05.2024, 21:23
@havefunidont

Wer lesen kann ist klar im Vorteil.

Ich habe in meiner Antwort einen Link auf eine deutschsprachige Basishilfe zu den Grundelementen von RegEx verlinkt.

Irgendwie scheint Dich das nicht so richtig überzeugen...

Also auch noch ein Link auf eine tiefgreifendere Erläuterung der Interna:

Der genannte Link bezieht sich speziell auf Wiederholungsopreratoren.

Dein Pattern "0^+" bedeutet:

  • Genau eine 0
  • Gefolgt von mindestens einem Zeilenanfang

(Finde den Fehler...

Auch wenn dieses Pattern keinen syntaktischen Fehler auslöst, kann es nie ein Match geben.

^ repressentiert den Beginn einer Zeile bzw. eines einzelnen Strings. Und vor dem Beginn kann kein Zeichen stehen.... und es gibt auch nicht mehrere aufeinanderfolgende Zeilenanfänge, insofern ist das + logisch einfach eine unmögliche Sache.

Ich habe sogar ein kleines leicht nachvollziehbares Powershellscript beigefügt, welches sogar anzeigt, was in welchem String als Match erkannt wird (oder auch nicht)

Ich frage mich ernsthaft, weshalb Du meine Kompetenz auf diesem Gebiet in Zweifel ziehst. Du brauchst das Script doch nur zu testen um zu erkennen, dass es genau so klappt, wie ich es erklärt hab.

0
havefunidont  04.05.2024, 07:46
@Erzesel

Ich verstehe nicht warum du meine Kompetenz bezweifelst. Und warum denkst du ich habe deine Antwort nicht ganz gelesen, denn das habe ich.Zudem befinde ich mich gerade im Studium mit dem Modul Theoretische Informatik, weshalb es keinen Grund gibt mein Wissen anzuzweifeln. Warum du jetzt so agressiv wirkst im Ton deiner Nachricht verstehe ich auch nicht. Meine Nachricht hast du scheinbar auch nicht gelesen, da ich klar gesagt habe

"Meines Wissens nach".

weshalb es auch sein könnte das ich mich irre. Den Disclaimer der unter dem Nachrichtenfeld erscheint "Schreibe respektvoll und hilf Deinen Mitlesern weiter." hast du scheinbar nicht gelesen. Es tut mir Leid wenn du keine Kritik ertragen kannst, denn eigentlich sollte das keine sein, ich wollte bloß dem Fragesteller die korrekte Antwort geben. Mir ist aufgefallen, dass es sich vielleicht bei deinem Kentnisstand um eine andere Notation handelt. Denn so wie ich es gelernt habe bedeutet (0+1) 0 oder 1 und 0^+ mindestens eine 0 aber bis maximal ins unendliche.

0
havefunidont  04.05.2024, 07:54
@havefunidont

Es ist halt komisch, dass alle Unis die ich gefunden habe, die selbe Notation lehren, so wie ich sie gelernt habe. VIelleicht hat sich da was in der Notation geändert, das könnte sein.

0

Die Sprache vom RE e = (0+1) L mit L(e) = L erzeugt nur die Wörter 0 und 1. Das "+" bedeutet nichts anderes als ein "oder".

Woher ich das weiß:Studium / Ausbildung

Alle die aus mindestens einer Null gefolgt von exakt einer Eins bestehen bzw. je nach Optionen diese Folge beinhalten.

naitram22  02.05.2024, 23:59

Das stimmt nicht. (0+1) beschreibt die Sprache, die nur aus „0“ und „1“ besteht.

1
naitram22  03.05.2024, 04:16
@JanaL161

Bei uns im Studium wurde das + als ein „Oder“ eingeführt und es gibt in dem Beispiel auch keinen Kleene Stern oder so, der auf Wiederholungen hindeutet.

Nach unserer Definition wäre das quasi „0 oder 1“, oder in dem Fall die Sprache, die nur 0 und 1 beinhaltet.

Mindestens eine 0 gefolgt von exakt einer 1 wäre: 0(0*)1

1
JanaL161  03.05.2024, 06:49
@naitram22

Weder nach den Perl noch POSIX Standards funktionieren RegEx so (alles andere in der Softwareentwicklung baut darauf auf). Auch Wikipedia und deren Quellen zeigen es so: https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck#Quantoren.

Zumindest im Themengebiet der Frage wird also standardmäßig mit einem anderen Syntax gearbeitet als in eurem Studium; was ja fine ist. Ich denke, um abschließend antworten zu können, wird es diesbezüglich noch Input vom Autor der Frage brauchen.

2
chriss1967  03.05.2024, 08:58
@naitram22

Nein die Antwort ist richtig. Es geht hier um RegEx und nicht eine Sprache "()" beschreibt eine capturing group. "0+" bedeutet "mindestens eine Null" und die "1" steht für die 1

1
Erzesel  03.05.2024, 10:16
@naitram22
Nach unserer Definition wäre das quasi „0 oder 1“

Dann hab Ihr wohl eine eigene Sprache erfunden. RegEx hat (weitgehend) feste Regeln. Abhängig von der verwendeten Engine kann es zu kleineren Abweichungen bezüglich des unterstützen "Sprachumfangs" kommen

Was die Grundfunktionen betrifft funktionieren dies in jeder Engine gleich.

keine Ahnung, was man Euch da beigebracht hat...

+ ist ein Wiederholungszeichen : mindestens einmal

https://www.regular-expressions.info/repeat.html

0
Erzesel  03.05.2024, 10:26
@naitram22
 0(0*)1

das ist eine "Krücke", welche man (aus Verzweiflung) bei findstr verwendet, weil dieser Befehl nur einen sehr rudimentären Satz an Metacharakteren unterstützt.

0
naitram22  03.05.2024, 21:11
@Erzesel

Wir haben keine Sprache erfunden. Wir haben im Studium Reguläre Ausdrücke im Bezug zu Automatentheorie und formalen Sprachen behandelt und da wurde keine Notation für eine RegEx Engine oder so benutzt.

https://www.informatik.uni-leipzig.de/~brewka/papers/3.RegulaereSprachen.pdf

Die Uni Leipzig lehrt bspw. auch unsere Notation.

Da der Fragesteller nichts spezifiziert hat bin ich von der gebräuchlichen Schreibweise ausgegangen, die auch in unseren Lehrbüchern genutzt wurde.

1
smiregal8472  03.05.2024, 21:26
@naitram22

Wir haben hier offenbar "reguläre Ausdrücke" auf der einen und "reguläre Ausdrücke" auf der anderen Seite.

Ohne weitere Angaben des FS ist weder das eine, noch das andere richtig oder falsch.

Das einzig falsche hier ist wenn überhaupt dein "Das stimmt nicht."

0
havefunidont  04.05.2024, 07:48
@naitram22

Das ist komisch ich bin gerade auch im Studium und bei uns wurde es genau gleich als "oder" eingeführt. Also da kann ich dir zustimmen.

0
havefunidont  04.05.2024, 07:52
@chriss1967

Also von Capturing Group haben wir nichts gelernt im Studium. Ein RegEx bedeutet RegularExpression / RE oder auf deutsch Regulärer Ausdruck. Die Uni Augsburg lehrt übrigens die exakt selbe Notation wie bei @naitram22

0
smiregal8472  04.05.2024, 09:19
@havefunidont

Das liegt wohl daran, dass es offenbar (mindestens) zwei verschiedene Dinge mit der Bezeichnung "regulärer Ausdruck" gibt.

Das, was ihr im Studium behandelt habt ist mir eher unbekannt, das andere dient zur Mustererkennung in Textdaten.

0
chriss1967  04.05.2024, 12:00
@havefunidont

Okay um die Diskussion zu beenden. Nach dem offiziellen Standard (https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html) habt ihr offensichtlich BREs beigebracht bekommen (Basic Regular Expressions). Diese definieren kein Plus und auch Capturing Groups gibt's nicht. Im Gegensatz dazu stehen EREs (Extended regular expressions), welche ?+ usw. definieren. Demnach haben wir alle Recht und sprechen nur von zwei verschiedenen Standards (Auch wenn eigentliche tools, Programmiersprachen, etc. Auf die EREs setzen, da diese eben mehr Möglichkeiten bieten und komfortabler zu nutzen sind)

2