Que suporte existe para o PCRE (Perl Compatible Regular Expressions) em idiomas comuns?

Estou interessado no poder do PCRE (expressões regulares compatíveis com Perl) e me pergunto se eles provavelmente se tornarão uma abordagem de fato em todas as principais linguagens (estou interessado em Java). Estou preparado para usar uma biblioteca, se necessário.

Eu também não consegui encontrar uma boa página no SO descrevendo os prós e contras do PCRE, então, se isso não existe, pode ser útil incluí-lo nas respostas.

EDIT Estou interessado em poder além do regex Java 1.6, particularmente chamado de grupos de captura

Parece que mais idiomas mainstream realmente usam sua própria implementação de regexes “Perl-like” do que realmente usam libpcre. As linguagens que se enquadram nessa class incluem (no mínimo) Java, JavaScript e Python.

A biblioteca java.util.regex do Java usa uma syntax muito fortemente baseada em expressões regulares Perl (aprox. Versão 5.8), incluindo as regras para escape, as classs Unicode \p e \P , quantificadores não possessivos e “possessivos”, referências anteriores, \Q .. \E citando, e várias das construções (?...) incluindo grupos sem captura, lookahead / behind de largura zero e grupos sem backtracking. Na verdade, as regexes de Java parecem ter mais em comum com os regexes Perl do que a libpcre. 🙂

A linguagem JavaScript também usa expressões regulares derivadas de Perl; Classes Unicode, lookbehind, quantificadores possessivos e grupos sem backtracking estão ausentes, mas o restante do que eu mencionei para Java também está presente no JS.

A syntax regex do Python também é baseada em Perl 5’s, com quantificadores não-gulosos, a maioria das construções (?...) incluindo grupos que não capturam, look-ahead / behind e padrões condicionais, bem como grupos de captura nomeados (mas com uma syntax diferente de Perl ou PCRE). Grupos sem backtracking e quantificadores ‘possessivos’ estão (até onde eu posso ver) ausentes, assim como as classs de caracteres \p e \P Unicode, embora as classs padrão \d , \s e \w sejam compatíveis com Unicode se solicitado .

Eu me pergunto se eles [PCRE] provavelmente se tornarão uma abordagem de fato em todas as principais linguagens (estou interessado em Java).

Isso exige especulação, mas acho que a resposta é não … no caso de Java. Eu baseio isso no fato de que não consigo encontrar nenhuma implementação PCRE válida para Java. (Além do java.util.regex claro.)

Se houvesse uma necessidade / demanda real pelo PCRE em Java, eu esperaria que houvesse mais bibliotecas por aí.

Tente fazer uma divisão deste jogo:

 (?: (?:'[\S\s]*?(? 

Certifique-se de usar os modificadores 'x' e 'g' (se necessário).

Exemplo

Isso soa muito como um “É o X a maneira verdadeira !?” tipo de pergunta. O PCRE tem muitas deficiências, sendo a mais óbvia sua complexidade e utilidade questionável. Raramente existe um One True Way para qualquer coisa, e no reino das bibliotecas regulares, PCRE certamente não é isso.

Perl expressões regulares são lixo total na minha opinião. Uma vez que você esteja muito além do conjunto de resources oferecido por regexs estendidos POSIX (ERE), você pode também usar algo como uma implementação PEG. A única razão pela qual o PCRE é usado tão amplamente usado é porque é fácil para as pessoas resolverem um problema simplesmente soltando uma biblioteca.

Intereting Posts