Regular expressions em c

4 respostas
rodrigo.bossini

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

4 Respostas

B

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

No seu caso, você teria de usar:

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

rodrigo.bossini

bezier curve:
[] 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 ()?

B

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

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

peczenyj

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.

Criado 7 de setembro de 2010
Ultima resposta 8 de set. de 2010
Respostas 4
Participantes 3