RegExp obteniendo el enlace de String excepto varios www

Nov 29 2020

cuando trato de obtener enlaces de String como

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

obtengo un enlace múltiple desde aquí porque tengo varios www, ¿cómo puedo excepto eso?

salida:

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

esta salida es incorrecta y debería ser un enlace, no dos enlaces

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

Mi patrón de expresiones regulares:

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

Respuestas

1 WiktorStribiżew Nov 30 2020 at 05:04

Puedes 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

Aquí, el patrón es

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

Ver la demostración de expresiones regulares

Detalles :

  • (?:https?:(?:\\?\/\\?\/|www\.)|www\.)- http, seguido con un scarácter opcional , luego :y luego //con un opcional \antes de cada /o www., solo owww.
  • [^\s<>"']*- cero o más caracteres que no sean espacios en blanco, <, >, "y'
  • \.mp3- una .mp3cuerda.