Регулярные выражения: Как написать паттерн для извлечения всех ссылок на aliexpress.ru/item/ из массива текстовых строк?
Для извлечения всех ссылок вида aliexpress.ru/item/ из массива текстовых строк используется регулярное выражение. Рассмотрим универсальный паттерн и его применение на разных языках программирования.
## Универсальный паттерн
Базовое регулярное выражение:
https?://(?:www.)?aliexpress.ru/item/[w-/]+(?:.html)?(?:?[^s»‘>]*)?
Разбор паттерна:
— https?:// — поддерживает как http, так и https
— (?:www.)? — необязательный префикс www
— aliexpress.ru/item/ — точное совпадение домена и пути (точка экранирована)
— [w-/]+ — идентификатор товара, состоящий из букв, цифр, дефисов и слешей
— (?:.html)? — необязательное расширение .html
— (?:?[^s»‘>]*)? — необязательная строка параметров запроса (UTM-метки, реферальные параметры)
## Пример на Python
import re
pattern = r’https?://(?:www.)?aliexpress.ru/item/[w-/]+(?:.html)?(?:?[^s»‘>]*)?’
lines = [
‘Купи здесь: https://www.aliexpress.ru/item/1005004567891234.html?spm=a2g2w’,
‘Ссылка: https://aliexpress.ru/item/32987654321.html’,
‘Просто текст без ссылки’
]
all_links = []
for line in lines:
found = re.findall(pattern, line)
all_links.extend(found)
print(all_links)
## Пример на JavaScript
const pattern = /https?://(?:www.)?aliexpress.ru/item/[w-/]+(?:.html)?(?:?[^s»‘>]*)?/g;
const lines = [
‘Товар: https://www.aliexpress.ru/item/1005001234567890.html’,
‘Другой текст’
];
const allLinks = lines.flatMap(line => line.match(pattern) || []);
console.log(allLinks);
## Пример на PHP
$pattern = ‘/https?://(?:www.)?aliexpress.ru/item/[w-/]+(?:.html)?(?:?[^s»‘>]*)?/i’;
$lines = [
‘Ссылка: https://www.aliexpress.ru/item/1005001234567890.html?utm_source=google’,
];
$allLinks = [];
foreach ($lines as $line) {
preg_match_all($pattern, $line, $matches);
$allLinks = array_merge($allLinks, $matches[0]);
}
print_r($allLinks);
## Важные нюансы
1. Если ссылки могут содержать кириллицу в параметрах — добавьте поддержку Unicode-символов.
2. Для очень длинных URL с вложенными путями расширьте класс символов.
3. Флаг re.IGNORECASE (или /i в PHP/JS) позволяет игнорировать регистр домена.
4. Паттерн намеренно не захватывает якоря (#section), так как они редко встречаются в товарных ссылках AliExpress.
Данный паттерн покрывает подавляющее большинство реальных форматов ссылок на товары AliExpress.
