Регулярное выражение для поиска mp3-адресов без конкретного слова - PullRequest
0 голосов
/ 26 января 2019

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

Вот регулярное выражение, которое я использую для поиска mp3-ссылок:

https?:\/\/.+\.mp3

Хорошо работает. Теперь я хочу исключить те URL, в которых есть определенное слово. Поэтому мне нужны URL, в которых нет определенного слова.

Как я могу исключить слово между http и .mp3?

Я буду использовать его в Qt с C ++, но пока он работает с https://regex101.com/, все в порядке.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Если вы хотите «исключить те URL-адреса, которые не содержат определенного слова в них», вы можете использовать положительный взгляд на слово (с некоторым количеством символов перед ним), например.

(?=.*Sing)

В Javascript:

const word = 'Sing';
const urls = ['http://I_like_to_sing.mp3', 'http://Another_song.mp3'];
let regex = new RegExp('https?:\/\/(?=.*' + word + ').+\.mp3', 'i');
console.log(urls.filter(v => v.match(regex)));

В PHP

$word = 'Sing';
$urls = ['http://I_like_to_sing.mp3', 'http://Another_song.mp3'];
$regex = "/https?:\/\/(?=.*$word).+\.mp3/i";
print_r(array_filter($urls, function ($v) use ($regex) { return preg_match($regex, $v); }));

Выход:

Array ( 
    [0] => http://I_like_to_sing.mp3 
)

Демонстрация на 3v4l.org

Update

Чтобы исключить те URL-адреса, в которых do содержит определенное слово, вместо этого можно использовать отрицательный взгляд, например,

(?![^.]*Sing)

Мы используем [^.], чтобы гарантировать, что слово встречается перед частью .mp3. Вот демоверсия PHP:

$word = 'Song';
$string = "some words http://I_like_to_sing.mp3 and then some other words http://Another_song.mp3 and some words at the end...";
$regex = "/(https?:\/\/(?![^.]*$word).+?\.mp3)/i";
preg_match_all($regex, $string, $matches);
print_r($matches[1]);

Выход:

Array ( 
    [0] => http://I_like_to_sing.mp3
)

Демонстрация на 3v4l.org

0 голосов
/ 26 января 2019

Надеюсь, это может быть полезным ответом.

Это регулярное выражение с регистром использования на python3 .Поэтому, если вы хотите исключить «слово» между http & .mp3 , вы можете сделать это.

import re

ref = "http://www.some_undesired_text_018/m102/1-225x338.mp3"

_del = re.findall(r'https?(.+)\.mp3', ref)[0]

out = ref.replace(_del, "")

#_del will contain the undesired word 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...