Pergunta

Preciso corresponder às declarações de pré -processador C ++. Agora, as declarações de pré -processador podem abranger várias linhas:

#define foobar \
    "something glorious"

Esta barra final final pode ser escapada para que os seguintes resultados em duas linhas separadas:

#define foobar \\
No longer in preprocessor.

A questão é como posso corresponder à continuação explícita da linha com eficiência. Eu tenho a seguinte expressão que eu acho funciona. Basicamente, ele testa se o número de barras de barriga é estranho. Isso está correto? Pode ser feito com mais eficiência?

/
    [^\\]           # Something that's not an escape character, followed by …
    (?<escape>\\*?) # … any number of escapes, …
    (?P=escape)     # … twice (i.e. an even number).
    \\ \n           # Finally, a backslash and newline.
/x

(Estou usando o PHP para que as regras do PCRE se apliquem, mas eu apreciaria respostas em algum Regex vernáculo.)

Foi útil?

Solução

Eu acho que você está tornando mais difícil do que precisa. Experimente isso:

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top