como selecionar correspondências internas em lex
-
03-07-2019 - |
Pergunta
sou novo para Lex e eu quero levar toda a jogos específicos para uma expressão regular
por exemplo, o seguinte texto:
/* text text
text
text
text */
text text
/* text text text text text text
text text */
Eu quero escolher os dois jogos entre / * e * /
mas partidas lex todo jogo exterior e doe não retornar os dois! Eu uso essa expressão:
\/\*(.|\n)*\*\/
Como selecionar partidas internas em vez de todo o exterior? obrigado
Solução
\/\*([^*]|\n|\*+[^*/])*\*+\/
O que está acontecendo é que * é ganancioso - vai coincidir com o tempo de uma seqüência possível. A expressão precedentes trata o caractere * separadamente, garantindo que a expressão regular pode continuar apenas enquanto não é seguido pelo caractere /. Isso é conseguido por ter as unidades interiores da expressão regular ser um dos
- um personagem que não é *
- uma nova linha
- uma série de * s seguido por um caractere que não é /
No final, há uma série de * s seguidos por um /. (Nota:.?. Uma versão anterior não lidar com este caso corretamente Eu realmente gostaria que o Flex teve o operador *)