| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/09/2010 14:59:50
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
Pessoal,
Tenho a seguinte regex:
[\\||>|<|2>]$
Que estou usando para reconhecer um dos seguintes comandos: |, <, >, 2>.
O problema é que ela reconhece somente o 2 como matching também (queria que reconhece somente se o 2 aparecesse junto com um > formando o comando 2> .
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/09/2010 16:03:13
|
bezier curve
JavaEvangelist
Membro desde: 28/11/2009 17:55:58
Mensagens: 411
Offline
|
[] não é a mesma coisa que ().
No seu caso, você teria de usar:
(\\||<|>|2>)$
This message was edited 1 time. Last update was at 07/09/2010 16:03:23
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/09/2010 19:55:40
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
bezier curve wrote:[] não é a mesma coisa que ().
No seu caso, você teria de usar:
(\\||<|>|2>)$
É verdade. Eu estava usando o [] porque preciso na verdade "negar" os operadores. Ou seja, na primeira posição da string, eu quero que tudo seja valido, menos um desses operadores.
Logo, estava usando: [^\\||<|>|2>]$
como eu faria essa negação usando ()?
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/09/2010 20:07:10
|
bezier curve
JavaEvangelist
Membro desde: 28/11/2009 17:55:58
Mensagens: 411
Offline
|
A negação é mais complicada que parece. Procure por "negative lookbehind".
http://www.regular-expressions.info/lookaround.html
This message was edited 1 time. Last update was at 07/09/2010 20:08:41
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/09/2010 11:00:18
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
vamos lá
quando vc usa [ e ] vc esta falando que quer um caracter (1) que esteja dentro destes limites (ou fora, se vc negar). Mas isto vale para um caracter.
Vc quer reconhecer pipes ou redirecionadores. Beleza. 2> é um identificador complexo, pois é seguido de um 2 e de um > -- identificando o redirecionamento do descriptor 2 que geralmente é a STDERR.
Eu tentaria identificar um > que pode ser precedido por um numero, pois 1> é valido, assim como 3> , 999> -- basta vc criar um descriptor destes.
e o < também pode ser precedido de um numero.
Eu encadearia IFs para encontrar estes caras se fosse usar REGEXP. Ou tentaria descrever uma gramatica e usar um parser que sabe lidar com gramatica BNF -- deve ter uma versão do ANTLR para ansi C.
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
|
|