문제

Lex를 처음 접했고 나는 정규 표현에 맞는 모든 경기를 원합니다.

예를 들어 다음 텍스트에서는 다음과 같습니다.

/* text text

text 
text

text */

text text
/* text text text text text text

text text */

/ *와 * /사이의 두 경기를 선택하고 싶습니다.

그러나 Lex는 전체 외부 경기와 일치하고 둘을 반환하지 않았습니다! 나는이 표현을 사용한다 :

\/\*(.|\n)*\*\/

전체 외부 대신 내부 경기를 선택하는 방법은 무엇입니까? 감사합니다

도움이 되었습니까?

해결책

\/\*([^*]|\n|\*+[^*/])*\*+\/

계속되는 것은 * 욕심이 많다는 것입니다. 가능한 한 스트링과 일치합니다. 앞의 표현식은 문자를 따로 뒤 따르는 한 정규 표현이 계속 될 수 있도록함으로써 문자 *를 개별적으로 취급합니다. 이것은 정규 표현의 내부 단위가

  • 없는 캐릭터 *
  • Newline
  • *s의 문자열 다음과 같은 문자가 없습니다.

결국, *s와 a /가 뒤 따릅니다. (참고 : 이전 버전은이 케이스를 올바르게 처리하지 못했습니다. Flex가 *? 연산자가 있기를 바랍니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top