Rumah > pembangunan bahagian belakang > tutorial php > Bolehkah Ungkapan Biasa Digunakan untuk Mengira Pembentukan Garis Menegak dalam Imej ASCII?

Bolehkah Ungkapan Biasa Digunakan untuk Mengira Pembentukan Garis Menegak dalam Imej ASCII?

Susan Sarandon
Lepaskan: 2024-11-07 22:01:03
asal
909 orang telah melayarinya

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

Memadankan Corak Menegak dalam Imej ASCII Menggunakan Ungkapan Biasa

Dalam konteks menganalisis imej atau peta ASCII, situasi mungkin timbul di mana mengenal pasti corak tertentu menjadi perlu. Satu corak sedemikian ialah pembentukan garis menegak tiga Xs. Menggunakan ungkapan biasa, adalah mungkin untuk menangani tugas ini dengan berkesan.

Soalan 1: Menentukan Kewujudan Pembentukan Garis Menegak

Untuk menentukan sama ada garis menegak pembentukan tiga X wujud, ungkapan biasa berikut boleh digunakan:

(?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
Salin selepas log masuk

Ungkapan ini menggunakan pandangan ke hadapan dengan kumpulan menangkap rujukan sendiri untuk mengira bilangan aksara pada setiap baris sebelum X muncul. Jika corak dikesan, ungkapan akan berjaya dipadankan.

Soalan 2: Mengira Kejadian Pembentukan Garis Menegak

Manakala pemadanan langsung menggunakan ungkapan biasa tidak dapat menyediakan kiraan tepat pembentukan garisan menegak kerana keupayaan melihat belakang terhad, wujud penyelesaian tidak langsung.

Dengan menggantikan semua padanan ungkapan berikut dengan $3, anda boleh mendapatkan jawapan kepada soalan dua (bilangan pola bagi interests) sebagai panjang rentetan yang terhasil:

^
(?:
    (?:                   # 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
Salin selepas log masuk

Ungkapan ini menggunakan teknik yang serupa dengan soalan pertama, tetapi dengan pengubahsuaian untuk memasukkan X dalam aksara yang dipadankan dalam pandangan pertama dan membungkusnya dengan pengkuantiti untuk mengira bilangan padanan.

Dengan menggunakan panjang rentetan yang terhasil sebagai kiraan, penyelesaian ini menyediakan pendekatan tidak langsung untuk menjawab soalan dua.

Atas ialah kandungan terperinci Bolehkah Ungkapan Biasa Digunakan untuk Mengira Pembentukan Garis Menegak dalam Imej ASCII?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan