Regular expressions em c

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

[] não é a mesma coisa que ().

No seu caso, você teria de usar:

(\||<|>|2>)$

[quote=bezier curve][] não é a mesma coisa que ().

No seu caso, você teria de usar:

(\||<|>|2>)$[/quote]

É 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 ()?

A negação é mais complicada que parece. Procure por “negative lookbehind”.

http://www.regular-expressions.info/lookaround.html

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.