Первое регулярное выражение ничего не делает, но добавляет ref///docs
в начало.
Объяснение :
/\]\((\/uploads\/.*?\.pdf)\)/g
\]
соответствует символу "]" \(
соответствует символу"("
1st Capturing Group (/uploads/.*?.pdf) \/
соответствует символу "/" uploads
соответствует символу "uploads" (с учетом регистра) \/
соответствует символу "/" .*?
соответствует любому символу (кроме ограничителей строки) *?
Quantifier - соответствует нулюи неограниченное количество раз, как можно меньше, расширяясь по мере необходимости (ленивый) \.
соответствует символу ". pdf
соответствует символам pdf (с учетом регистра) \)
соответствует символу)
Глобальные флаги шаблона
g
модификатор: global. Все совпадения (не возвращаются после первого совпадения)
Рассмотрим пример :
test_str = "](/uploads/something.pdf)"
perl:
my $test_str = "](/uploads/something.pdf)";
$test_str =~ s/\]\((\/uploads\/.*?\.pdf)\)/\]\(ref\/\/\/docs$1\)/g;
python:
test_str = "](/uploads/something.pdf)"
test_str = re.sub(r"\]\((\/uploads\/.*?\.pdf)\)", r"](ref///docs\1)", test_str)
Output of print test_str
после подстановки:
](ref///docs/uploads/something.pdf)
Я не знаю, что вы действительно хотите делать во втором регулярном выражении, но регулярное выражение perl говорит, что нужно заменить любой URL-адрес example.com налюбая переменная $test
.Давайте поиграем:
perl:
my $test = "test";
my $data = "<li>list 1 https://www.example.com/site </li>";
$data =~ s/<li>.*?https:\/\/www\.example\.com.*?<\/li>/$test/is;
python:
data = "<li>list 1 https://www.example.com/site </li>";
test = "test"
data = re.sub(r"<li>.*?https:\/\/www\.example\.com.*?<\/li>", test, data, re.S|re.I)
Вывод печати data
после замены:
test
Модификаторы :
i
означает игнорировать регистр (поиск без учета регистра) s
означает, что точка теперь будет соответствовать любому символу (включая символ новой строки)