shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Regex para casar links num documento markdown


From: Arkanon
Subject: Re: [shell-script-pt] Regex para casar links num documento markdown
Date: Tue, 14 Mar 2023 03:11:30 -0300

Achei!

Veja a sutil diferença:

pcre='\[[^]]+\]\(([^()]+|[^(]+\([^)]+\).*)\)'
 ere='\[[^]]+\]\(([^()]+|[^()]+\([^)]+\).*)\)'

$ grep --color -noP $pcre exemplo.md
$ grep --color -noE $ere  exemplo.md


Obrigado pelo problema :)

(o_                          __o
//\   arkanon@lsd.org.br   _`\<,
V_/_                      (_)/(_)
---------------------------------


Em ter., 14 de mar. de 2023 às 02:57, Arkanon <arkanon@lsd.org.br> escreveu:
Por algum motivo obscuro, se você forçar o grep a usar PCRE, a coisa funciona como imagino que você queira:

$ grep --color -noP '\[[^]]+\]\(([^()]+|[^(]+\([^)]+\).*)\)' exemplo.md
3:[CMS](https://en.wikipedia.org/wiki/Content_management_system)
3:[Wordpress](https://wordpress.org/)
4:[LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle))
6:[Geradores de sites estáticos](https://en.wikipedia.org/wiki/Static_site_generator)
7:[Jekyll](https://jekyllrb.com/)
7:[Hugo](https://gohugo.io/)
9:[contato](/contact)


Só não estou identificando agora nessa ER nenhuma característica específica de PCRE que justifique não funcionar com ERE...

(o_                          __o
//\   arkanon@lsd.org.br   _`\<,
V_/_                      (_)/(_)
---------------------------------


Em seg., 13 de mar. de 2023 às 22:41, Guilherme Gall <gmgall@gmail.com> escreveu:
Fala Arkanon, tudo certo?

Consegui ver a formatação, sim. Muito obrigado pela resposta. :-D

Realmente lá no regex101 parece que fica certinho.

Só não funciona colocando ela diretamente no grep como eu conseguia
fazer com a 1ª versão. Considerando o mesmo arquivo exemplo.md:

--- shell ---
$ grep -n -E -o '\[[^]]+\]\(([^()]+|[^(]+\([^)]+\).*)\)' exemplo.md
3:[CMS](https://en.wikipedia.org/wiki/Content_management_system), como
o [Wordpress](https://wordpress.org/). Porém, verifique se você pode
instalar a pilha
[LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle))
5:[Geradores de sites
estáticos](https://en.wikipedia.org/wiki/Static_site_generator) (como
o [Jekyll](https://jekyllrb.com/) ou o [Hugo](https://gohugo.io/))
7:[contato](/contact)
--- fim da saída do shell ---

Observe que ela casa do início do 1º link na linha até o final do
último link na linha num único grupo.

Na linha 3, tem 3 links que casam como um grupo só. Na linha 5 idem.

Vou quebrar a cabeça um pouco por aqui com flags do grep e tentando
adaptar a tua versão.

Abraço,

Guilherme

Em seg., 13 de mar. de 2023 às 12:47, Arkanon <arkanon@lsd.org.br> escreveu:
>
>
> Experimente essa versão:
>
> https://regex101.com/r/KMzhNZ/2
>
> A ER ficou
>
> \[[^]]+\]\(([^()]+|[^(]+\([^)]+\).*)\)
>
> Não sei se você verá a formatação com fundo vermelho.
> Minha sugestão é considerar 2 casos:
>
> -----------------------------v  url's sem parênteses
> \[[^]]+\]\(   (   [^()]+   |   [^(]+\([^)]+\).*   )   \)
> ------------------------------------------------------^ url's com parênteses
>
> ISSO (não a sugestão anterior :-p) ajuda?
>
> Ab,
>
> (o_                          __o
> //\   arkanon@lsd.org.br   _`\<,
> V_/_                      (_)/(_)
> ---------------------------------
>
>
> Em seg., 13 de mar. de 2023 às 11:58, Guilherme Gall <gmgall@gmail.com> escreveu:
>>
>> Saudações, pessoal. Tudo bem?
>>
>> Estou quebrando a cabeça com uma regex aqui e talvez alguém veja uma
>> solução que ainda não vi.
>>
>> Estou tentando casar todos os links em um arquivo markdown. Listarei
>> um exemplo de arquivo de entrada e minha tentativa abaixo, mas caso
>> fique difícil de entender, está no regex101 também:
>> https://regex101.com/r/KMzhNZ/1
>>
>> Exemplo de arquivo:
>>
>> --- exemplo.md ---
>> # Blogs
>>
>> Uma alternativa é usar um
>> [CMS](https://en.wikipedia.org/wiki/Content_management_system), como o
>> [Wordpress](https://wordpress.org/). Porém, verifique se você pode
>> instalar a pilha
>> [LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle)) por aí.
>>
>> [Geradores de sites
>> estáticos](https://en.wikipedia.org/wiki/Static_site_generator) (como
>> o [Jekyll](https://jekyllrb.com/) ou o [Hugo](https://gohugo.io/))
>> também são alternativas populares.
>>
>> Se quiser trocar ideia comigo sobre isso, entre em [contato](/contact).
>> --- fim de exemplo.md ---
>>
>> Minha tentativa de casamento foi:
>>
>> --- shell ---
>> $ grep -n -E -o '\[[^]]+\]\([^)]+\)' exemplo.md
>> 3:[CMS](https://en.wikipedia.org/wiki/Content_management_system)
>> 3:[Wordpress](https://wordpress.org/)
>> 3:[LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle)
>> 5:[Geradores de sites
>> estáticos](https://en.wikipedia.org/wiki/Static_site_generator)
>> 5:[Jekyll](https://jekyllrb.com/)
>> 5:[Hugo](https://gohugo.io/)
>> 7:[contato](/contact)
>> --- fim da saída do shell ---
>>
>> Um link no markdown tem o formato [texto do link](url), então minha
>> lógica foi casar:
>>
>> - um "abre colchetes" literal seguido de
>> - ao menos um caractere que não seja um "fecha colchetes" seguido de
>> - um "fecha colchetes" literal seguido de
>> - um "abre parênteses" literal seguido de
>> - ao menos um caractere que não seja um "fecha parênteses" seguido de
>> - um "fecha parênteses"
>>
>> Isso **quase** funciona. O link em que não funciona é o para a URL
>> https://en.wikipedia.org/wiki/LAMP_(software_bundle) que possui
>> parênteses.
>>
>> Toda tentativa de fazer o link acima casar, só acabou com uma regex
>> mais difícil de entender e que casava errado o link para
>> https://gohugo.io/, pegando inadvertidamente o "fecha parênteses" do
>> texto (além do do link).
>>
>> Virou uma situação em que quando eu acertava o casamento para o link
>> de texto "LAMP", eu quebrava o casamento para o link de texto "Hugo" e
>> vice-versa.
>>
>> Alguma ideia?
>>
>> Grato desde já,
>>
>> Guilherme
>>
>> _______________________________________________
>> Lista brasileira de usuários de shell script
>> Endereço de e-mail da lista: shell-script-pt@nongnu.org
>> Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
>> Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>>
>> NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
>
> _______________________________________________
> Lista brasileira de usuários de shell script
> Endereço de e-mail da lista: shell-script-pt@nongnu.org
> Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
> Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/
>
> NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]