>  기사  >  백엔드 개발  >  정규식을 사용하여 ASCII 이미지의 수직선 형성 수를 계산할 수 있습니까?

정규식을 사용하여 ASCII 이미지의 수직선 형성 수를 계산할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 22:01:03832검색

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

정규식을 사용하여 ASCII 이미지에서 수직 패턴 일치

ASCII 이미지나 지도를 분석하는 과정에서 다음과 같은 상황이 발생할 수 있습니다. 특정 패턴을 식별하는 것이 필요해집니다. 그러한 패턴 중 하나는 세 개의 X가 수직선으로 형성되는 것입니다. 정규식을 사용하면 이 작업을 효과적으로 처리할 수 있습니다.

질문 1: 수직선 형성 여부 확인

수직선이 있는지 확인하려면 세 개의 X가 형성되어 있으면 다음 정규 표현식을 사용할 수 있습니다.

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

이 표현식은 자체 참조 캡처 그룹이 있는 미리보기를 활용하여 X가 나타나기 전에 각 줄의 문자 수를 계산합니다. 패턴이 감지되면 표현식이 성공적으로 일치합니다.

질문 2: 수직선 형성 횟수 계산

정규식을 사용한 직접 일치는 제공할 수 없지만 제한된 뒤돌아보기 기능으로 인해 수직선 형성의 정확한 수를 계산하기 위한 간접적인 해결책이 있습니다.

다음 표현식의 모든 일치 항목을 $3로 바꾸면 질문 2(패턴 수)에 대한 답을 얻을 수 있습니다. 관심 사항)을 결과 문자열의 길이로 사용:

^
(?:
    (?:                   # 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

이 표현식은 첫 번째 질문과 유사한 기술을 사용하지만 첫 번째 예측에서 일치하는 문자에 X를 포함하도록 수정하고 수량자로 래핑합니다.

결과 문자열의 길이를 개수로 활용하여 이 솔루션은 두 번째 질문에 답하는 간접적인 접근 방식을 제공합니다.

위 내용은 정규식을 사용하여 ASCII 이미지의 수직선 형성 수를 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.