regular expressions em c  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
rodrigo.bossini
GUJ Master
[Avatar]

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?
bezier curve
JavaEvangelist
[Avatar]
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

rodrigo.bossini
GUJ Master
[Avatar]

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?
bezier curve
JavaEvangelist
[Avatar]
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

peczenyj
Moderador
[Avatar]

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.'
[WWW]
 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team