PCRE/PHP, Perl, .NET 또는 이와 유사한 최신 정규식을 사용하여 확인하는 것이 가능합니다. ASCII "이미지"에 세 개의 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 앞에 있는 각 줄의 문자 수입니다. 미리보기에 지정된 조건을 일치시켜 세로 형식의 X 문자 3개를 일치시키려고 시도합니다.
온라인 데모: https://regex101 .com/r/Xb5FXl/2
Perl 및 PCRE와 같이 제한된 뒷모습을 사용하는 정규식에서는 직접 해결할 수 없지만 다음은 가능합니다. 일치하는 문자열을 조작하여 개수를 간접적으로 결정합니다.
다음 솔루션은 세 개의 X가 나타나는 일치 부분의 문자 수를 일치시키고 계산하여 m.buettner의 "부분 PCRE 솔루션"을 수정합니다.
^ (?: (?: # 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
이 표현식은 이전 표현식과 동일한 형식과 일치하지만 세 번째 캡처 그룹을 추가하고 해당 그룹 내에서 일치하는 문자의 길이를 계산합니다. 세 번째 캡처 그룹의 내용으로만 일치 항목을 대체하면 결과 문자열 길이는 3-X 형식의 수를 나타냅니다.
Perl의 사용 예:
$in =~ s/regex//gmx; $count = length $in;
온라인 데모: https://regex101.com/r/iqxY1a/1
테스트 사례:
Test #0: -------------------- X X X result: 1 (X) Test #1: -------------------- ..X.... ..X.... ..X.... result: 1 (.) Test #2: -------------------- ..X.X.. ..X.X.. ....X.. result: 1 (.) Test #3: -------------------- ..X.... ..X.... ...X... result: 0 () Test #4: -------------------- ..X.... ...X... ..X.... result: 0 () Test #5: -------------------- ....X.. .X..X.. .X..... result: 0 () Test #6: -------------------- .X..X.. .X.X... .X.X... result: 1 (.) Test #7: -------------------- .X..X.. .X..X.. .X..X.. result: 2 (.X) Test #8: -------------------- XXX XXX XXX result: 3 (XXX) Test #9: -------------------- X.X.X XXXXX XXXXX .X.X. result: 5 (XXXXX) Test #10: -------------------- 1....X....... 2..X..X...X.... 3X.X...X..X..... 4X....XXXXXX..... 5X..XXX........... 6.....X.......... 7.........X....X 8..X......X....X.... 9..X......X....X....X... A....X..... B.X..X.. C..... XXX XXX XXX . result: 8 (3458.XXX)
위 내용은 정규식은 ASCII 이미지의 수직선 형성에서 세 개의 X를 감지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!