RegExp obtendo link de String exceto vários www

Nov 29 2020

quando tento obter links de String como

"Olá Mundo https://www.sample.com/voices/2020/my-sound-www.sample.com"

recebo vários links a partir daqui porque tenho vários www, como posso excluir isso?

resultado:

  1. https://www.sample.com/voices/2020/my-sound-www.sample.com
  2. www.sample.com

esta saída está incorreta e deve ser um link, não dois links

https://www.sample.com/voices/2020/my-sound-www.sample.com

Meu padrão regex:

r"((https?:www\.)|(https?:\/\/)|(www\.))[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9]{1,6}(\/[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)?"

Respostas

1 WiktorStribiżew Nov 30 2020 at 05:04

Você pode usar

final reg = RegExp(r'(?:https?:(?:\\?\/\\?\/|www\.)|www\.)[^\s<>"'']*\.mp3');
final m = reg.firstMatch(test);
print(m.group(0));
// => https://www.caferilik.com/wp-content/uploads/2020/11/Anne-Baba-Biz-Suçluyuz-Muhafazakar-Ailelerde-Kuşak-Çatışması-Sesli-Kitap-www.caferilik.com_.mp3

Aqui, o padrão é

(?:https?:(?:\\?\/\\?\/|www\.)|www\.)[^\s<>"']*\.mp3

Veja a demonstração de regex

Detalhes :

  • (?:https?:(?:\\?\/\\?\/|www\.)|www\.)- http, seguido por um scaractere opcional :e, em seguida, //por um opcional \antes de cada /ou www., apenas ouwww.
  • [^\s<>"']*- zero ou mais que não sejam espaços em branco caracteres, <, >, "e'
  • \.mp3- uma .mp3corda.