RegExp는 여러 www를 제외하고 문자열에서 링크를 가져옵니다.

Nov 29 2020

문자열에서 다음과 같은 링크를 얻으려고 할 때

"안녕하세요 세상 https://www.sample.com/voices/2020/my-sound-www.sample.com"

여러 링크가 있기 때문에 여기에서 여러 링크를 얻습니다 www. 어떻게 제외 할 수 있습니까?

산출:

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

이 출력은 올바르지 않으며 두 링크가 아닌 하나의 링크 여야합니다.

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

내 정규식 패턴 :

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

답변

1 WiktorStribiżew Nov 30 2020 at 05:04

당신이 사용할 수있는

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

여기서 패턴은

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

참고 항목 정규식 데모

세부 사항 :

  • (?:https?:(?:\\?\/\\?\/|www\.)|www\.)- http선택 사양에 따라 s다음 문자 :중 하나를 다음 //옵션으로 \각각 이전 /또는 www.단지 또는www.
  • [^\s<>"']*- 공백 이외의 0 개 이상의 문자, <, >, "'
  • \.mp3- .mp3문자열.