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

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

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


From: Guilherme Gall
Subject: [shell-script-pt] Regex para casar links num documento markdown
Date: Mon, 13 Mar 2023 11:58:18 -0300

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



reply via email to

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