次のような ASCII 画像では、
....X....... ..X..X...X.... X.X...X..X..... X....XXXXXX..... X..XXX........... .....X.......... ..............X ..X...........X.... ..X...........X....X... ....X.....
we'正規表現以外の最良の方法を使用せずに、3 つの X の単純な垂直線の形成を見つけたいと考えています。
そのような形成が PCRE/ に存在するかどうかを確認するにはPHP、Perl、.NET、または同様の正規表現では、次の式を使用できます:
(?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
プレーン マッチング
For直接一致し、一致の数としてカウントが必要な場合、後読みサポートが制限されているため、この問題を PCRE または Perl で直接解決することはできません。
長さ/間接的な解決策
ただし、答えは一致または置換の長さとして受け入れられ、次の式で答えることができます:
^ (?: (?: # 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
以上が正規表現を使用して ASCII 画像内の 3 つの「X」の縦線を見つけることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。