ホームページ  >  記事  >  バックエンド開発  >  正規表現を使用して、ASCII「画像」内の 3 つの連続する「X」文字の垂直方向の形成をカウントするにはどうすればよいですか?

正規表現を使用して、ASCII「画像」内の 3 つの連続する「X」文字の垂直方向の形成をカウントするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-08 06:18:02282ブラウズ

 How can I use regular expressions to count vertical formations of three consecutive

ASCII「画像」内の垂直正規表現一致

問題ステートメント

ASCII 文字で構成される画像のテキストベースの表現で、3 つの連続する「X」文字の垂直方向の構成を識別しようとします。画像内の線の幅と数はさまざまです。

一致する存在 (質問 1)

そのような構成の存在を判断するには、次のことができます。次の正規表現を使用します:

(?xm)
^                        # Beginning of line
(?:
    .                    # Any character except newline
    (?=                  # Lookahead
        .*+\n            # Move to next line
        ( ?+ . )       # Add a character to capturing group 1
        .*+\n            # Next line
        ( ?+ . )       # Add a character to capturing group 2
    )
)*?                      # Repeat as necessary
X .*+\n                  # X on first line, advance to next line
?+                     # If capturing group 1 is defined, use it
X .*+\n                  # X on second line, advance to next line
?+                     # If capturing group 2 is defined, use it
X                        # X on third line

この式は、自己参照キャプチャ グループの先読みを利用して、各行の繰り返しに文字を追加し、それらを「カウント」します。すべての条件が満たされた場合にのみ、正規表現が一致し、フォーメーションの存在が示されます。

出現回数のカウント (質問 2)

一致長さの使用

PCRE と Perl (および同様のフレーバー) は正規表現を使用して出現回数を直接カウントできませんが、代わりの解決策は、置換結果の長さを尺度として使用することです。次の式のすべての出現箇所を「$3」に置き換えることで、結果の文字列の長さがカウントを提供します:

^
(?:
    (?:                   # Match .+? characters
        .
        (?=               # Count 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
        ( ?+ . )        # Number of matches = length of 
    )
)*                        # Repeat as long as there are matches on this line
.*\n?                     # Remove the rest of the line

この式は、質問 1 と同様のアプローチを採用していますが、カウントされる文字に X が含まれ、数値が数値化されます。

一致を使用したマッチング

ほとんどの正規表現では可変長の後読みは利用できませんが、Java や .NET などの一部のものでは部分的な解決策を提供できます。 。後読みを使用すると、置換結果の長さに依存せずに出現回数を直接カウントできます。

以上が正規表現を使用して、ASCII「画像」内の 3 つの連続する「X」文字の垂直方向の形成をカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。