Ответ 1
с помощью Perl:
s/.*doc=(\d+).*/"www.site.com\/headline\/".($1+100000).".article"/e;
как вы это сделали с флагом e, правая часть становится теперь выражением. поэтому вы должны обернуть часть не захвата в виде строк.
Мне нужно добавить число в обратную ссылку при выполнении операции замены.
Eg. Я переписываю URL
www.site.com/doc.asp?doc=321&language=1
к
www.site.com/headline/100321.article
например. простую замену, но мне нужно добавить 100 000 в id документа. То, что у меня ниже, работает до сих пор, не добавляя ничего.
s/.*doc=(\d+).*/www.site.com\/headline\/$1.article/g;
Но как я могу добавить от 100 000 до $1?
Обратите внимание: вы не можете просто добавить '100' перед номером, потому что doc-идентификатор может быть > 999.
с помощью Perl:
s/.*doc=(\d+).*/"www.site.com\/headline\/".($1+100000).".article"/e;
как вы это сделали с флагом e, правая часть становится теперь выражением. поэтому вы должны обернуть часть не захвата в виде строк.
Это невозможно в регулярном выражении. Regex соответствует только шаблонам, он не выполняет арифметику.
Лучшее, что вы можете сделать, это нечто подробное:
match replace
(\d{6,}) $1
(\d{5}) 1$1
(\d{4}) 10$1
(\d{3}) 100$1
(\d{2}) 1000$1
(\d) 10000$1
Если у вас есть только несколько статей, вы можете просто скопировать его
...doc=322 -> www.site.com/headline/100322.article
...doc=323 -> www.site.com/headline/100323.article
...doc=324 -> www.site.com/headline/100324.article
...etc
Математика в регулярном выражении, вы видите ее здесь сначала.