Как я могу получить 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+&@#/%=~_|]
Это выражение, скорее всего, пропустит нужные вам входные данные:
^(https?|ftp|file):\/\/(www.)?(.*?)\.(mp3)$
Если вы хотите добавить к нему больше границ, вы можете сделать это.Например, вы можете добавить список символов вместо .*.
.*
Я добавил несколько групп захвата, просто чтобы при необходимости было просто позвонить.
Если это не было вашим желаемым выражением, вы можете изменить / изменить свои выражения в regex101.com .
Вы также можете визуализировать свои выражения в jex.im :
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}`); }); }
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)); } }
Если вы хотите, чтобы он совпадал с входными данными, заканчивающимися на '.mp3', вы должны добавить \.mp3$ в конце вашего регулярного выражения.
\.mp3$
$ обозначает конец вашего выражения
$
(https?|ftp|file):\/\/[-a-zA-Z0-9+&@#\/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#\/%=~_|]\.mp3$
https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3 **=> Match** https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp4 **=> No Match**
Вы можете использовать якоря, чтобы утверждать начало ^ и конец $ строки и заканчивать шаблон с помощью .mp3:
^
.mp3
^https?://\S+\.mp3$
Пояснение
https?://
://
\S+
\.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)); } }
Результат