Heim  >  Artikel  >  Backend-Entwicklung  >  Können reguläre Ausdrücke zum Zählen vertikaler Linienformationen in ASCII-Bildern verwendet werden?

Können reguläre Ausdrücke zum Zählen vertikaler Linienformationen in ASCII-Bildern verwendet werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-07 22:01:03835Durchsuche

 Can Regular Expressions Be Used to Count Vertical Line Formations in ASCII Images?

Übereinstimmung vertikaler Muster in einem ASCII-Bild mit regulären Ausdrücken

Im Zusammenhang mit der Analyse von ASCII-Bildern oder Karten können Situationen auftreten, in denen Es wird notwendig, bestimmte Muster zu identifizieren. Ein solches Muster ist eine vertikale Linienformation aus drei Xs. Mit regulären Ausdrücken ist es möglich, diese Aufgabe effektiv zu lösen.

Frage 1: Bestimmen der Existenz einer vertikalen Linienformation

Um festzustellen, ob eine vertikale Linie vorliegt Wenn eine Bildung von drei Wenn das Muster erkannt wird, wird der Ausdruck erfolgreich abgeglichen.

(?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

Frage 2: Zählen des Auftretens vertikaler Linienformationen

Während ein direkter Abgleich mit regulären Ausdrücken nicht möglich ist Wenn Sie aufgrund der begrenzten Lookbehind-Fähigkeiten eine genaue Zählung der vertikalen Linienformationen benötigen, gibt es eine indirekte Lösung.

Indem Sie alle Übereinstimmungen des folgenden Ausdrucks durch $3 ersetzen, können Sie die Antwort auf Frage zwei (die Anzahl der Muster von) erhalten Interessen) als Länge der resultierenden Zeichenfolge:

Dieser Ausdruck verwendet eine ähnliche Technik wie die erste Frage, jedoch mit Änderungen, um X in die im ersten Lookahead abgeglichenen Zeichen aufzunehmen und es mit einem Quantifizierer zu umschließen um die Anzahl der Übereinstimmungen zu zählen.

^
(?:
    (?:                   # 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
Durch die Verwendung der Länge der resultierenden Zeichenfolge als Zählung bietet diese Lösung einen indirekten Ansatz zur Beantwortung von Frage zwei.

Das obige ist der detaillierte Inhalt vonKönnen reguläre Ausdrücke zum Zählen vertikaler Linienformationen in ASCII-Bildern verwendet werden?. 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