JavaRush /Java Blog /Random-KO /RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계. 4부
Artur
레벨 40
Tallinn

RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계. 4부

Random-KO 그룹에 게시되었습니다
RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계. 1부 RegEx: 정규식을 익히는 20가지 간단한 단계. 2부 정규식을 익히는 20개의 간단한 단계입니다. 3부 중간에 있는 이 마지막 부분에서는 정규식 전문가가 주로 사용하는 내용을 다룹니다. 하지만 전편의 자료는 쉬웠죠? 이는 이 자료를 똑같이 쉽게 다룰 수 있다는 것을 의미합니다! 원본은 여기 RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 1 <h2>16단계: 캡처하지 않은 그룹 (?:)</h2> RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 2이전 단계의 두 가지 예에서는 실제로 필요하지 않은 텍스트를 캡처했습니다. 파일 크기 작업에서는 파일 크기의 첫 번째 숫자 앞의 공백을 캡처했고, CSV 작업에서는 각 토큰 사이의 쉼표를 캡처했습니다. 이러한 문자를 캡처할 필요는 없지만 정규식을 구성하는 데 사용해야 합니다. 캡처하지 않고 그룹을 사용하는 데 이상적인 옵션입니다 (?:). 비캡처 그룹은 말 그대로 문자를 그룹화하고 정규 표현식에서 사용할 수 있지만 번호가 매겨진 그룹에서는 캡처하지 않습니다.
패턴: (?:")([^"]+)(?:") 문자열: "이 따옴표 안의 텍스트" 
만 원합니다 .
일치 항목:             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
그룹:                 1111111111111111111111111111    
( ) 이제 정규식은 인용된 텍스트뿐만 아니라 인용 문자 자체도 일치하지만 캡처 그룹은 인용된 텍스트만 캡처했습니다. 왜 우리는 이것을 해야 합니까? 요점은 대부분의 정규식 엔진을 사용하면 정규식에 정의된 캡처 그룹에서 텍스트를 복구할 수 있다는 것입니다. 필요하지 않은 추가 문자를 캡처 그룹에 포함하지 않고 잘라낼 수 있다면 나중에 텍스트를 더 쉽게 구문 분석하고 조작할 수 있습니다. 이전 단계의 CSV 파서를 정리하는 방법은 다음과 같습니다.
패턴: (?:^|,)\s*(?:\"([^",]*)\"|([^", ]*)) 
문자열:   a , " b ", " cd ", e , f , " gh ", dfgi ,, k , "", l 
일치: ^ ^ ^^^ ^ ^ ^^^ ^^^^ ^ ^ 
그룹:    2 1 111 2 2 111 2222 2 2    
( ) <mark>여기에서 주목해야 할 몇 가지 사항이 있습니다:</mark> 첫째, 캡처 그룹을 (^|,)비캡처 그룹으로 변경했기 때문에 더 이상 쉼표를 캡처하지 않습니다 (?:^|,). 둘째, 캡처 그룹을 비캡처 그룹 내에 중첩했습니다. 예를 들어 특정 순서로 문자 그룹을 표시해야 하지만 해당 문자의 하위 집합에만 관심이 있는 경우에 유용합니다. 우리의 경우 따옴표 안에 표시하기 위해 따옴표 가 아닌 문자와 쉼표 가 아닌[^",]* 문자가 필요했지만 실제로는 따옴표 문자 자체가 필요하지 않았으므로 캡처할 필요가 없었습니다. k마지막으로, 위의 예에서 문자 와 사이에 길이가 0인 일치도 있다는 점을 <mark>참고</mark>하세요 l. 따옴표는 ""검색된 하위 문자열이지만 따옴표 사이에 문자가 없으므로 일치하는 하위 문자열에는 문자가 없습니다(길이 0). <h3>우리의 지식을 통합해볼까요? 여기에 도움이 될 두 가지 작업이 있습니다:</h3> 비캡처 그룹(및 캡처 그룹, 문자 클래스 등)을 사용하여 라인에서 올바른 형식의 파일 크기만 캡처하는 정규식을 작성합니다. 아래에 :
무늬:
문자열:   6.6KB 1..3KB 12KB 5G 3.3MB .6.2TB 9MB .
일치 항목: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
그룹:    11111 1111 11111 111    
( 해결 방법 ) HTML 여는 태그는 로 시작 <하고 로 끝납니다 >. HTML 닫는 태그는 일련의 문자로 시작 </하고 문자로 끝납니다 >. 태그 이름은 이 문자 사이에 포함됩니다. 다음 태그의 이름만 캡처하는 정규식을 작성할 수 있습니까? (캡처하지 않는 그룹을 사용하지 않고도 이 문제를 해결할 수 있습니다. 이 두 가지 방법으로 해결해 보십시오. 그룹을 사용하여 한 번, 그룹을 사용하지 않고 한 번.)
무늬:
문자열:   <p> </span> <div> </kbd> <link> 
일치: ^^^ ^^^^^^ ^^^^^ ^^^^^^ ^^^^^^ 
그룹:    1 1111 111 111 1111    
( 비캡처 그룹을 사용하는 솔루션 ) ( 비캡처 그룹을 사용하지 않는 솔루션 ) <h2>17단계: 백링크 \N및 명명된 캡처 그룹</h2> RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 3소개에서 일반적으로 정규식을 사용하여 HTML 파서를 생성하려고 한다고 경고했지만 마음이 아플 수 있습니다. 이 마지막 예는 대부분의 정규식의 또 다른 (때때로) 유용한 기능인 역참조에 대한 좋은 연결입니다. 백링크는 동일한 텍스트를 두 번 캡처할 수 있는 반복 그룹과 같습니다. 그러나 한 가지 중요한 측면이 다릅니다. 즉, 동일한 텍스트를 문자별로 캡처할 뿐입니다. 반복 그룹을 사용하면 다음과 같은 내용을 캡처할 수 있습니다.
패턴: (he(?:[az])+) 
문자열:   heyabcdefg hey heyo heyellow heyyyyyyyyy 
일치: ^^^^^^^^^^ ^^^ ^^^^ ^^^^^^^^ ^^^ ^^^^^^^^ 
그룹 :    1111111111 111 1111 11111111 11111111111    
( ) ...그러면 백링크는 다음과만 일치합니다.
패턴: (he([az])(\2+)) 
문자열: heyabcdefg hey heyo heyellow heyyyyyyyyy 
일치:                              ^^^^^^^^^^^ 
그룹:                                 11233333333    
( ) 반복 캡처 그룹은 동일한 패턴을 반복적으로 일치시키려는 경우 유용하고, 백링크는 동일한 텍스트를 일치시키고 싶을 때 유용합니다. 예를 들어 백링크를 사용하여 일치하는 열기 및 닫기 HTML 태그를 찾을 수 있습니다.
패턴: <(\w+)[^>]*>[^<]+<\/\1> 
문자열:   <span style="color: red">hey</span> 
일치: ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
그룹 :    1111    
( ) 이것은 매우 단순화된 예이므로 <mark>참고</mark> 정규식 기반 HTML 파서를 작성하지 않는 것이 좋습니다. 이것은 매우 복잡한 구문이며 아마도 여러분을 아프게 만들 것입니다. 명명된 캡처 그룹은 백링크와 매우 유사하므로 여기서는 간단히 다루겠습니다. 역참조와 명명된 캡처 그룹의 유일한 차이점은... 명명된 캡처 그룹에는 이름이 있다는 것입니다.
패턴: <(?<tag>\w+)[^>]*>[^<]+<\/(?P=tag)></tag> 
문자열:   <span style="color: red">안녕< /span> 
일치: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
그룹:    1111    
( ) (?<name>...) 또는 (?'name'...) 구문(.NET 호환 정규식) 또는 이 구문(?P<name>)을 사용하여 명명된 캡처링 그룹을 생성할 수 있습니다. ..) 또는 (?P'name'...) (Python 호환 정규 표현식). 우리는 두 버전을 모두 지원하는 PCRE(Perl Compatible Regular Expression)를 사용하고 있으므로 여기서는 둘 중 하나를 사용할 수 있습니다. (Java 7은 .NET 구문을 복사했지만 꺾쇠 괄호 버전만 복사했습니다. 번역자 참고 사항) 나중에 정규 표현식에서 명명된 캡처 그룹을 반복하려면 \<kname> 또는 \k'name'(.NET) 또는 (? P= 이름) (파이썬). 다시 말하지만 PCRE는 이러한 다양한 옵션을 모두 지원합니다. 여기에서 명명된 캡처 그룹에 대한 자세한 내용을 읽을 수 있지만 이에 대해 실제로 알아야 할 대부분은 이것이었습니다. <h3>도움이 되는 작업:</h3> 백링크를 사용하면... 음... 이 사람의 이름을 기억하는 데 도움이 됩니다.
무늬:
string: "안녕하세요. 제 이름은 Joe입니다." [나중에] "그 사람 이름이 뭐예요? 조 ?"
일치 항목:        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ 
그룹:                  111    
( 해결 방법 ) <h2>18단계: 미리보기 및 뒤돌아보기</h2> RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 4이제 정규식의 고급 기능 중 일부를 살펴보겠습니다. 저는 16단계까지의 모든 것을 꽤 자주 사용합니다. 그러나 이 마지막 몇 단계는 매우 복잡한 표현식을 일치시키기 위해 정규식을 매우 진지하게 사용하는 사람들에게만 해당됩니다. 즉, 정규식의 달인입니다. "앞으로 보기"와 "뒤로 보기"는 꽤 복잡해 보일 수도 있지만 실제로는 그다지 복잡하지 않습니다. 이를 통해 이전에 비캡처 그룹에서 수행한 것과 유사한 작업을 수행할 수 있습니다. 일치시키려는 실제 텍스트 바로 앞이나 바로 뒤에 텍스트가 있는지 확인하세요. 예를 들어, 사람들이 좋아하는 것의 이름만 일치시키고, 열성적인 경우에만 일치시키고 싶다고 가정해 보겠습니다. (느낌표로 문장을 끝내는 경우에만) 우리는 다음과 같이 할 수 있습니다:
패턴: (\w+)(?=!) 
문자열: 저는 책상을 좋아해요. 스테이플러 감사합니다. 나는 램프를 좋아한다 !
일치 항목:                                           ^^^^ 
그룹:                                              1111    
( (\w+) ) 일반적으로 구절의 모든 단어와 일치하는 위의 캡처 그룹이 램프라는 단어에만 일치하는 방식을 확인할 수 있습니다 . 긍정적인 미리보기는 다음 (?=!)으로 끝나는 시퀀스만 일치시킬 수 !있지만 실제로 느낌표 문자 자체는 일치하지 않음을 의미합니다. 비캡처 그룹의 경우 캐릭터를 일치시키기는 하지만 캡처하지는 않기 때문에 이는 중요한 차이점입니다. 미리보기 및 뒤돌아보기를 사용하면 문자를 사용하여 정규식을 작성하지만 문자 자체와 일치시키지도 않습니다. 나중에 정규식에서 일치시킬 수 있습니다. 미리보기와 뒤돌아보기에는 네 가지 유형이 있습니다: 긍정적 미리보기(?=...), 부정적 미리보기(?!...), 긍정적 미리보기(?<=...) 및 부정적 미리보기(?<!. ..) . 이는 말 그대로 수행됩니다. 긍정적인 미리보기 및 뒤돌아보기는 미리보기/뒤돌아보기에 포함된 텍스트가 실제로 일치하는 경우에만 정규식 엔진이 계속 일치하도록 허용합니다. 부정적인 미리보기와 뒤돌아보기는 그 반대입니다. 미리보기/뒤돌아보기에 포함된 텍스트가 일치하지 않는 경우에만 정규식이 일치하도록 허용합니다. 예를 들어, 우리는 메소드 이름이 작동하는 객체가 아닌 메소드 시퀀스 체인에서만 메소드 이름을 일치시키길 원합니다. 이 경우 각 메소드 이름 앞에는 가 와야 합니다 .. 여기서 간단한 되돌아보기를 사용하는 정규 표현식이 도움이 될 수 있습니다.
패턴: (?<=\.)(\w+) 
문자열: myArray. flatMap.aggregate.summarise.print !
일치 항목:         ^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ ^^^^^ 
그룹:            1111111 111111111 111111111 11111    
( ) 위의 텍스트에서는 단어 문자의 순서를 일치시키지만 \w+앞에 문자가 있는 경우에만 일치합니다 .. 비캡처 그룹을 사용하여 비슷한 결과를 얻을 수 있지만 결과는 조금 더 복잡합니다.
패턴: (?:\.)(\w+) 
문자열: myArray .FlatMap.aggregate.summarise.print !
일치 항목:        ^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ ^^^^^ 
그룹:            1111111 111111111 111111111 11111    
( ) 길이가 짧더라도 필요하지 않은 문자와 일치합니다. 이 예는 사소해 보일 수 있지만 미리보기와 뒤돌아보기는 정규식을 정리하는 데 실제로 도움이 될 수 있습니다. <h3>마감까지 얼마 남지 않았습니다! 다음 2가지 작업을 통해 이에 한 단계 더 가까워질 수 있습니다.</h3> 부정형 뒤돌아보기(?<!...)를 사용하면 부정형 뒤돌아보기(?<!...) 안에 포함된 텍스트가 일치하지 않는 경우에만 정규식 엔진이 계속해서 일치 항목을 찾으려고 시도할 수 있습니다. 일치하는 항목을 찾아야 하는 나머지 텍스트까지 표시됩니다. 예를 들어 정규식을 사용하여 회의에 참석하는 여성의 성만 일치시킬 수 있습니다. 이를 위해 해당 사람의 성 앞에 Mr.. 이에 대한 정규식을 작성할 수 있나요? (성(Last name)은 최소 4자 이상으로 가정할 수 있습니다.)
무늬:
문자열: Mr. 브라운 씨, 스미스 부인. 존스 , 미스 데이지 , 미스터. 녹색
일치 항목:                ^^^^^ ^^^^^ ^^^^^ 
그룹:                   11111 11111 11111    
( 해결책 ) 데이터베이스를 지우고 백분율을 나타내는 정보 열이 있다고 가정해 보겠습니다. 불행하게도 어떤 사람들은 [0.0, 1.0] 범위의 십진수 값으로 숫자를 썼고, 다른 사람들은 [0.0%, 100.0%] 범위의 백분율을 썼고, 또 다른 사람들은 백분율 값을 썼는데 문자 그대로의 백분율 기호를 잊어버렸습니다 %. 부정 예측(?!...)을 사용하면 백분율이어야 하는데 숫자가 누락된 값만 표시할 수 있나요 %? 이는 1.00보다 엄격하게 큰 값이어야 하지만 뒤에 %. (어떤 숫자도 소수점 앞뒤에 두 자리 이상의 숫자를 포함할 수 없습니다.) <mark>참고</mark> 이 해결 방법은 매우 어렵습니다 . 내 답을 보지 않고도 이 문제를 풀 수 있다면, 당신은 이미 정규 표현식에 대한 엄청난 능력을 갖고 있는 것입니다!
무늬:
문자열: 0.32 100.00 5.6 0.27 98% 12.2% 1.01 0.99% 0.99 13.13 1.10 
일치:      ^^^^^^ ^^^ ^^^^ ^^^^^ ^^^^ 
그룹:         111111 111 1111 11111 1111    
( 해결 방법 ) <h2>19단계: 정규 표현식의 조건</h2> RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 5이제 대부분의 사람들이 더 이상 정규 표현식을 사용하지 않는 지점에 도달했습니다. 우리는 간단한 정규 표현식에 대한 사용 사례의 95%를 다루었으며 19단계와 20단계에서 수행되는 모든 작업은 일반적으로 awk 또는 sed(또는 범용 프로그래밍 언어)와 같은 보다 완전한 기능을 갖춘 텍스트 조작 언어에 의해 수행됩니다. 그렇다면 정규 표현식이 실제로 무엇을 할 수 있는지 알아보도록 하겠습니다. 정규식은 Turing 완전한 것은 아니지만 일부 정규식 엔진은 완전한 프로그래밍 언어와 매우 유사한 기능을 제공합니다. 그러한 기능 중 하나가 "조건"입니다. Regex 조건문은 if-then-else 문을 허용합니다. 여기서 선택한 분기는 이전 단계에서 배운 "앞으로 보기" 또는 "뒤로 보기"에 의해 결정됩니다. 예를 들어 날짜 목록에서 유효한 항목만 일치시키려고 할 수 있습니다.
패턴: (?<=Feb )([1-2][0-9])|(?<=Mar )([1-2][0-9]|3[0-1]) 
문자열: 근무 날짜 : 2월 28일 , 2월 29일 , 2월 30일, 3월 30일 , 3월 31일  
경기:                   ^^ ^^ ^^ ^^ 
그룹:                      11 11 22 22    
( ) 위 그룹도 월별로 색인이 생성되어 있다는 <mark>참고</mark>를 참고하세요. 12개월 전체에 대한 정규식을 작성하고 유효한 날짜만 캡처한 다음 해당 날짜를 월별로 색인이 지정된 그룹으로 결합할 수 있습니다. 위의 내용은 "2월"이 숫자 앞에 오는 경우에만 첫 번째 그룹에서 일치하는 항목을 찾는 일종의 if 유사 구조를 사용합니다(두 번째에도 유사). 하지만 2월에만 특수 처리를 사용하고 싶다면 어떻게 해야 할까요? "숫자 앞에 "2월"이 오면 이렇게 하고, 그렇지 않으면 이렇게 하세요."와 같은 것입니다. 조건문이 이를 수행하는 방법은 다음과 같습니다.
패턴: (?(?<=Feb )([1-2][0-9])|([1-2][0-9]|3[0-1])) 
문자열: 근무 날짜: 2월 28일 , 2월 29일 , 2월 30일, 3월 30 일 , 3월 31일  
일치:                   ^^ ^^ ^^ ^^ 
그룹:                      11 11 22 22    
( ) if-then-else 구조는 (?(If)then|else)와 같습니다. 여기서 (if)는 "앞으로 보기" 또는 "뒤로 보기"로 대체됩니다. 위의 예에서는 (if)를 로 씁니다 (?<=Feb). 29보다 큰 날짜와 일치했음을 알 수 있지만 "2월"을 따르지 않는 경우에만 해당됩니다. 일치 항목 앞에 일부 텍스트가 있는지 확인하려는 경우 조건식에서 뒤돌아보기를 사용하는 것이 유용합니다. 긍정적 예측 조건은 조건 자체가 어떤 텍스트와도 일치하지 않기 때문에 혼란스러울 수 있습니다. 따라서 if 조건에 값이 있기를 원한다면 아래와 같이 미리보기와 비교할 수 있어야 합니다.
패턴: (?(?=정확함)정확함|else)wo 
문자열: 정확함 else 정확wo elsewo  
일치:            ^^^^^^^ ^^^^^^
( ) 이는 긍정적 예측 조건이 쓸모가 없음을 의미합니다. 해당 텍스트가 앞에 있는지 확인한 다음 텍스트가 앞에 있으면 일치하는 패턴을 제공합니다. 조건식은 여기서 전혀 도움이 되지 않습니다. 위의 내용을 더 간단한 정규식으로 바꿀 수도 있습니다.
패턴: (?:exact|else)wo 
문자열: 정확한 else 정확한wo elsewo  
일치:            ^^^^^^^ ^^^^^^
( ) 따라서 조건식의 경험 법칙은 테스트하고 테스트하고 다시 테스트하는 것입니다. 그렇지 않으면 당연하다고 생각하는 솔루션이 가장 흥미롭고 예상치 못한 방식으로 실패할 것입니다. :) <h3>여기서 마지막 20번째 단계와 구분되는 마지막 작업 블록이 왔습니다.</h3> 다음과 같은 정규식을 작성하세요. 다음 단어가 대문자로 시작하는지 여부를 테스트하기 위해 부정 예측 조건식을 사용합니다. 그렇다면 대문자 하나만 잡고 그 다음에는 소문자를 선택하세요. 그렇지 않은 경우 단어 문자를 가져옵니다.
무늬:
문자열:   Jones Smith 9sfjn Hobbes 23r4tgr9h CSV Csv vVv 
일치: ^^^^^ ^^^^^ ^^^^^ ^^^^^^ ^^^^^^^^^ ^^^ ^^^ 
그룹:    22222 22222 11111 222222 111111111 222 111    
( 해결책owns ) 텍스트 앞에 텍스트가 없는 경우에만 텍스트를 캡처하고 텍스트 앞에 텍스트가 있을 때만 cl텍스트를 캡처하는 부정적인 뒤돌아보기 조건식을 작성하십시오 . (약간 허술한 예이지만 어떻게 할 수 있나요...) oudscl
무늬:
string: 저 광대들은 구름 몇 개 를 소유하고 있습니다 . 소리.
일치:              ^^^^ ^^^^   
( 해결 방법 ) <h2>20단계: 재귀 및 추가 연구</h2> RegEx: 정규식을 마스터하기 위한 20가지 간단한 단계.  파트 4 - 6실제로 어떤 주제에 대해서도 20단계 소개로 압축할 수 있는 내용이 많으며 정규 표현식도 예외는 아닙니다. 인터넷에서 찾을 수 있는 정규식에 대한 다양한 구현 및 표준이 있습니다 . 더 많은 것을 배우고 싶다면, 정규 표현식에 대해 많은 것을 배울 수 있는 멋진 사이트인 Regularexpressions.info를 확인해 보시기 바랍니다. 이는 정말 훌륭한 참고 자료입니다. 귀하의 창작물을 테스트하고 게시하려면 regex101.com 과 함께 이 사이트를 적극 권장합니다 . 이 마지막 단계에서는 정규 표현식, 즉 재귀 표현식을 작성하는 방법에 대해 좀 더 자세히 설명하겠습니다. 단순 재귀는 매우 간단하지만 정규 표현식의 맥락에서 이것이 무엇을 의미하는지 생각해 보겠습니다. 정규식의 단순 재귀 구문은(?R)? 다음과 같이 작성됩니다 . 그러나 물론 이 구문은 표현식 자체 내에 나타나야 합니다. 우리가 할 일은 표현식 자체 내에 임의의 횟수만큼 중첩되는 것입니다. 예를 들어:
패턴: (hey(?R)?oh) 
문자열:   heyoh heyyoh heyheyohoh hey oh heyhey hey heyheyohoh  
일치 항목: ^^^^^ ^^^^^^^^^^^^^^^^^^^^ 
그룹:    11111 1111111111 1111111111    
( ) 중첩 표현식은 선택 사항이므로( (?R)따름 ?) 가장 간단한 일치는 재귀를 완전히 무시하는 것입니다. 따라서 , 는 ( ) hey와 일치합니다 . 이보다 더 복잡한 표현식을 일치시키려면 시퀀스를 삽입한 표현식 지점에서 자체 내부에 중첩된 일치하는 하위 문자열을 찾아야 합니다 . 즉, heyheyyohoh 또는 heyheyheyohohoh 등을 찾을 수 있습니다. 이러한 중첩 표현식의 가장 큰 장점 중 하나는 역참조 및 명명된 캡처링 그룹과 달리 이전에 일치했던 정확한 텍스트를 문자별로 제한하지 않는다는 것입니다. 예를 들어: ohheyoh(?R)
패턴: ([Hh][Ee][Yy](?R)?oh) 
문자열:   heyoh heyyoh hEyHeYohoh hey oh heyhey hEyHeYHEyohohoh  
일치 항목: ^^^^^ ^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^ 
그룹 :    11111 1111111111 111111111111111    
( ) 정규식 엔진이 문자 그대로 정규식을 임의의 횟수만큼 복사하여 붙여넣는 것을 상상할 수 있습니다. 물론 이는 때때로 기대했던 대로 작동하지 않을 수도 있음을 의미합니다.
패턴: ((?:\(\*)[^*)]*(?R)?(?:\*\))) 
문자열: (* 주석 (* 중첩 *) * 아님)
일치 항목:            ^^^^^^^^^^^^ 
그룹:               111111111111    
( ) 이 정규식이 외부 주석이 아닌 중첩된 주석만 캡처한 이유를 알 수 있습니까? 한 가지는 확실합니다. 복잡한 정규식을 작성할 때 항상 테스트하여 생각한 대로 작동하는지 확인하세요. 정규식의 길을 따라 진행되는 이 고속 집회가 끝났습니다. 이번 여행이 즐거웠기를 바랍니다. 그리고 마지막으로, 처음에 약속한 대로 자료에 대한 보다 심층적인 연구를 위한 몇 가지 유용한 링크를 여기에서 떠나겠습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION