複数の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

この出力は正しくなく、2つのリンクではなく1つのリンクである必要があります

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<>"']*-空白以外のゼロ以上の文字、<>"及び'
  • \.mp3-.mp3文字列。