>백엔드 개발 >C++ >정규식은 적절하게 세미콜론으로 끝나는 C For 및 While 루프를 확실하게 식별할 수 있습니까?

정규식은 적절하게 세미콜론으로 끝나는 C For 및 While 루프를 확실하게 식별할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 04:33:13608검색

Can a Regular Expression Reliably Identify Properly Semi-Colon Terminated C   For and While Loops?

세미콜론으로 끝나는 C For & While 루프에 대한 정규식

과제: 다음을 식별하는 정규식 만들기:

  • 세미콜론으로 C for 또는 while 루프가 올바르게 종료됨 (;)
  • 세미콜론 종료가 없는 루프

초기 시도:

제공된 초기 정규 표현식은 내부의 균형 잡힌 괄호를 효과적으로 감지합니다. for/while 문. 그러나 루프 표현식에 함수 호출이 포함되어 있으면 어려움을 겪습니다.

^\s*(for|while)\s*
\(  # match the initial opening parenthesis
    (?P<balanced>
        [^()]
        |
        \( (?P=balanced)* \)
    )*  # Look for a sequence of balanced substrings
\)  # Finally, the outer closing parenthesis.
\s*;\s*

수정된 접근 방식:

제안된 해결 방법은 정규식 기반 접근 방식에서 벗어났습니다. 대신, 다음과 같은 단순한 루틴을 사용합니다.

  1. for/while 문의 여는 괄호 앞의 문자에 대해 pos를 초기화합니다.
  2. 초기 값이 0인 openBr 카운터를 설정합니다.
  3. 문자열을 반복하면서 pos를 증가시키고 발생한 결과에 따라 openBr을 증가/감소시킵니다.
  4. openBr이 0으로 반환되면 반복을 종료합니다.
  5. 단계에서 찾은 닫는 괄호 바로 뒤에 세미콜론이 있는지 확인합니다. 4.

장점:

  • 단순성과 명확성
  • 복잡한 정규식에 의존하지 않음
  • 능력 함수 호출이 포함된 표현식으로 루프를 처리하려면

위 내용은 정규식은 적절하게 세미콜론으로 끝나는 C For 및 While 루프를 확실하게 식별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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