Lex에서 내부 경기를 선택하는 방법
-
03-07-2019 - |
문제
Lex를 처음 접했고 나는 정규 표현에 맞는 모든 경기를 원합니다.
예를 들어 다음 텍스트에서는 다음과 같습니다.
/* text text
text
text
text */
text text
/* text text text text text text
text text */
/ *와 * /사이의 두 경기를 선택하고 싶습니다.
그러나 Lex는 전체 외부 경기와 일치하고 둘을 반환하지 않았습니다! 나는이 표현을 사용한다 :
\/\*(.|\n)*\*\/
전체 외부 대신 내부 경기를 선택하는 방법은 무엇입니까? 감사합니다
해결책
\/\*([^*]|\n|\*+[^*/])*\*+\/
계속되는 것은 * 욕심이 많다는 것입니다. 가능한 한 스트링과 일치합니다. 앞의 표현식은 문자를 따로 뒤 따르는 한 정규 표현이 계속 될 수 있도록함으로써 문자 *를 개별적으로 취급합니다. 이것은 정규 표현의 내부 단위가
- 없는 캐릭터 *
- Newline
- *s의 문자열 다음과 같은 문자가 없습니다.
결국, *s와 a /가 뒤 따릅니다. (참고 : 이전 버전은이 케이스를 올바르게 처리하지 못했습니다. Flex가 *? 연산자가 있기를 바랍니다.)
제휴하지 않습니다 StackOverflow