Heim >Backend-Entwicklung >PHP-Tutorial >Kann ein regulärer Ausdruck drei X in einer vertikalen Linienformation in einem ASCII-Bild erkennen?
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 lineDie 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 lineTestfä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!