RegEx для соответствия mp3 URL - PullRequest
2 голосов
/ 18 мая 2019

Как я могу получить URL-адрес mp3 с помощью REGEX?

Этот mp3-адрес, например:

https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3

Это то, что я пробовал до сих пор, но я хочу, чтобы он принимал только URL с '.mp3' в конце.

(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]

Ответы [ 3 ]

4 голосов
/ 18 мая 2019

Это выражение, скорее всего, пропустит нужные вам входные данные:

^(https?|ftp|file):\/\/(www.)?(.*?)\.(mp3)$

Если вы хотите добавить к нему больше границ, вы можете сделать это.Например, вы можете добавить список символов вместо .*.

enter image description here

Я добавил несколько групп захвата, просто чтобы при необходимости было просто позвонить.

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить свои выражения в regex101.com .

Схема RegEx

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

const regex = /^(https?|ftp|file):\/\/(www.)?(.*?)\.(mp3)$/gm;
const str = `https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
http://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
http://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
ftp://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
file://localhost/examples/mp3/SoundHelix-Song-1.mp3
file://localhost/examples/mp3/SoundHelix-Song-1.wav
file://localhost/examples/mp3/SoundHelix-Song-1.avi
file://localhost/examples/mp3/SoundHelix-Song-1.m4a`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Java Test

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^(https?|ftp|file):\\/\\/(www.)?(.*?)\\.(mp3)$";
final String string = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3\n"
     + "http://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3\n"
     + "http://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3\n"
     + "ftp://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3\n"
     + "file://localhost/examples/mp3/SoundHelix-Song-1.mp3\n"
     + "file://localhost/examples/mp3/SoundHelix-Song-1.wav\n"
     + "file://localhost/examples/mp3/SoundHelix-Song-1.avi\n"
     + "file://localhost/examples/mp3/SoundHelix-Song-1.m4a";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
2 голосов
/ 18 мая 2019

Если вы хотите, чтобы он совпадал с входными данными, заканчивающимися на '.mp3', вы должны добавить \.mp3$ в конце вашего регулярного выражения.

$ обозначает конец вашего выражения

(https?|ftp|file):\/\/[-a-zA-Z0-9+&@#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#\/%=~_|]\.mp3$

Matching:

https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3 **=> Match** 
https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp4 **=> No Match** 
0 голосов
/ 18 мая 2019

Вы можете использовать якоря, чтобы утверждать начало ^ и конец $ строки и заканчивать шаблон с помощью .mp3:

^https?://\S+\.mp3$

Пояснение

  • ^ Подтвердить начало строки
  • https?:// Соответствует http с необязательными s и ://
  • \S+ Соответствие 1+ раз непробельному символу
  • \.mp3 Матч .mp3
  • $ Утверждение конца строки

Regex demo | Java демо

Например:

String regex = "^https?://\\S+\\.mp3$";
String[] strings = {
        "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
        "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp4"
};
Pattern pattern = Pattern.compile(regex);
for (String s : strings) {
    Matcher matcher = pattern.matcher(s);
    if (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

Результат

https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
...