Heim >Backend-Entwicklung >PHP-Tutorial >Kann ein regulärer Ausdruck drei X in einer vertikalen Linienformation in einem ASCII-Bild erkennen?

Kann ein regulärer Ausdruck drei X in einer vertikalen Linienformation in einem ASCII-Bild erkennen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 02:47:01459Durchsuche

Can a Regular Expression Detect Three Xs in a Vertical Line Formation in an ASCII Image?

Bestimmen Sie, ob eine vertikale Linienformation aus drei Xs existiert

Mit modernen Regex-Varianten wie PCRE/PHP, Perl, .NET oder ähnlichem ist es möglich, festzustellen wenn in einem ASCII-Bild eine vertikale Linienformation aus drei Anzahl der Zeichen in jeder Zeile vor einem .com/r/Xb5FXl/2

Zählen Sie die Anzahl der vertikalen Linienformationen von drei Bestimmen Sie indirekt die Anzahl, indem Sie die übereinstimmende Zeichenfolge manipulieren.

(?xm)                    # ignore comments and whitespace, ^ matches beginning of line
^                        # beginning of line
(?:
    .                    # any character except \n
    (?=                  # lookahead
        .*+\n            # go to next line
        ( ?+ . )       # add a character to the 1st capturing group
        .*+\n            # next line
        ( ?+ . )       # add a character to the 2nd capturing group
    )
)*?                      # repeat as few times as needed
X .*+\n                  # X on the first line and advance to next line
?+                     # if 1st capturing group is defined, use it, consuming exactly the same number of characters as on the first line
X .*+\n                  # X on the 2nd line and advance to next line
?+                     # if 2st capturing group is defined, use it, consuming exactly the same number of characters as on the first line
X                        # X on the 3rd line
Die folgende Lösung modifiziert die „partielle PCRE-Lösung“ von m.buettner, indem sie die Anzahl der Zeichen in dem Teil der Übereinstimmung, in dem die drei X vorkommen, abgleicht und zählt.

Dieser Ausdruck entspricht den gleichen Formationen wie der vorherige, fügt jedoch eine dritte Erfassungsgruppe hinzu und zählt die Länge der übereinstimmenden Zeichen innerhalb dieser Gruppe. Indem die Übereinstimmungen nur durch den Inhalt der dritten einfangenden Gruppe ersetzt werden, stellt die resultierende Zeichenfolgenlänge die Anzahl der Drei-X-Formationen dar.

Beispielverwendung in Perl:

Online-Demo:

https://regex101.com/r/iqxY1a/1
^
(?:
    (?:                   # match .+? characters
        .
        (?=               # counting the same number on the following two lines
            .*+\n
            ( ?+ . )
            .*+\n
            ( ?+ . )
        )
    )+?
    (?<= X )              # till the above consumes an X
    (?=                   # that matches the following conditions
        .*+\n
        ?+
        (?<= X )
        .*+\n
        ?+
        (?<= X )
    )
    (?=                   # count the number of matches
        .*+\n
        ( ?+ . )        # the number of matches = length of 
    )
)*                        # repeat as long as there are matches on this line
.*\n?                     # remove the rest of the line

Testfälle:

Das obige ist der detaillierte Inhalt vonKann ein regulärer Ausdruck drei X in einer vertikalen Linienformation in einem ASCII-Bild erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn