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

Foi útil?

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 *)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top