Ich muss einen Weg finden, um die Existenz von Mengen des Typs zu überprüfen {1,2,3,4,5,6,8,9,10}
, die eine voreingestellte Anzahl von Elementen haben. Beachten Sie auch die fehlenden 7
. Offensichtlich können die Zahlen in beliebiger Reihenfolge sein und sollten nur einmal erscheinen, da gemäß Definition {1,2,3} = {3,2,1} = {1,2,3,3} = ...
und so weiter.
Wie könnte ich das mit Perl machen (oder ist es überhaupt möglich)? Eine Sache, die ich versucht habe, war {([1-6],|[8-9],|10,){8}([1-6]|[8-9]|10)}
hier , aber dies kümmert sich nicht um die mehreren Instanzen derselben Nummer in den Klammern.
Dieser Regex macht das.
Hier werden 10 Slots zugewiesen, aber Sie können so viele hinzufügen, wie Sie möchten (hundert?).
Dies bedeutet nicht, dass Sie 10 eindeutige Zahlen in einem Satz abgleichen müssen.
Sie können mit weniger als oder gleich 10 (Beispiel {5}
)
oder sogar einem Bereich wie übereinstimmen{3,7}
Die Slots werden nacheinander ab 1 gefüllt.
Sie müssen also nur in einer Schleife von 1 - N sitzen und sehen, ob sie definiert ist.
Wenn Sie Geschwindigkeit suchen, ist dies der Dämon, den Sie wollen!
/\{(?>(?>(?(1)(?!))((?&GetNum))|(?(2)(?!))((?&GetNum))|(?(3)(?!))((?&GetNum))|(?(4)(?!))((?&GetNum))|(?(5)(?!))((?&GetNum))|(?(6)(?!))((?&GetNum))|(?(7)(?!))((?&GetNum))|(?(8)(?!))((?&GetNum))|(?(9)(?!))((?&GetNum))|(?(10)(?!))((?&GetNum)))(?:,(?!\})|(?=\}))){3,7}\}(?(DEFINE)(?<GetNum>(?!(?:\g{1}|\g{2}|\g{3}|\g{4}|\g{5}|\g{6}|\g{7}|\g{8}|\g{9}|\g{10})\b)\d+))/
https://regex101.com/r/pPwPTe/1
Lesbarer regulärer Ausdruck
# Unique numbers in set, 10 slots
\{
(?> # Atomic, no backtracking allowed
(?> # ditto
(?(1) (?!) ) ( (?&GetNum) ) # (1), Slot 1
| (?(2) (?!) ) ( (?&GetNum) ) # (2), Slot 2
| (?(3) (?!) ) ( (?&GetNum) ) # (3), Slot 3
| (?(4) (?!) ) ( (?&GetNum) ) # (4), Slot 4
| (?(5) (?!) ) ( (?&GetNum) ) # (5), Slot 5
| (?(6) (?!) ) ( (?&GetNum) ) # (6), Slot 6
| (?(7) (?!) ) ( (?&GetNum) ) # (7), Slot 7
| (?(8) (?!) ) ( (?&GetNum) ) # (8), Slot 8
| (?(9) (?!) ) ( (?&GetNum) ) # (9), Slot 9
| (?(10) (?!) ) ( (?&GetNum) ) # (10), Slot 10
)
(?: , (?! \} ) | (?= \} ) )
){3,7} # Set range, example: 3 to 7 unique numbers in set
\}
(?(DEFINE)
(?<GetNum> # (4) Get a new number, must not be seen before
(?! (?: \g{1}|\g{2}|\g{3}|\g{4}|\g{5}|\g{6}|\g{7}|\g{8}|\g{9}|\g{10} ) \b )
\d+
)
)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen