원래 질문은 다음으로 끝나는 C for 또는 while 루프를 식별하기 위해 정규식을 찾았습니다. 세미콜론. 제안된 솔루션은 명명된 캡처 그룹을 활용했지만 루프의 세 번째 표현식에 함수 호출이 포함될 때 문제에 직면했습니다.
이 문제를 해결하기 위해 대체 접근 방식이 개발되었습니다.
# match any line that begins with a "for" or "while" statement: REGEX_STR = r"^\s*(for|while)\s*\(" # match a balanced substring, accounting for function calls within expressions: SUB_STR_PATTERN = r"([^\(\)]|(\([^\(\)]*(?:\|\|[^()\s]*(?1))*?\)))" # match a balanced string of arbitrary length, including function calls: SUB_STR_GROUP = f"(?P<balanced>{SUB_STR_PATTERN})+" # match the initial opening parenthesis, followed by balanced expressions, and finally the closing parenthesis. REGEX_STR += f"{SUB_STR_GROUP}\)\s*;\s*" # compile the regex object with MULTILINE and VERBOSE flags for readability REGEX_OBJ = re.compile(REGEX_STR, re.MULTILINE | re.VERBOSE)
이 향상된 정규식은 SUB_STR_PATTERN을 활용하여 함수 호출을 포함할 수 있는 균형 잡힌 부분 문자열입니다. || 연산자는 논리적 OR 조건을 생성하는 데 사용되어 패턴이 괄호가 아닌 문자 또는 중첩된 균형 문자열과 일치할 수 있도록 합니다.
SUB_STR_GROUP 내에서 이 패턴을 반복함으로써 정규 표현식은 균형 잡힌 문자열의 시퀀스와 일치할 수 있는지 확인합니다. 중첩 수준에 관계없이 식을 사용할 수 있습니다.
이 향상된 정규식은 탐지를 위한 더욱 강력한 솔루션을 제공합니다. C for 또는 while 루프는 함수 호출이 루프의 세 번째 표현식 내에 있는 경우에도 세미콜론으로 종료됩니다. 재귀 패턴이 필요하지 않아 논리가 단순화됩니다.
위 내용은 세미콜론으로 끝나는 C For 및 While 루프를 안정적으로 감지하기 위해 정규식을 어떻게 개선할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!