Подтвердить что ты не робот

Математические операции в регулярном выражении

Мне нужно добавить число в обратную ссылку при выполнении операции замены.

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.

4b9b3361

Ответ 1

с помощью Perl:

s/.*doc=(\d+).*/"www.site.com\/headline\/".($1+100000).".article"/e;

как вы это сделали с флагом e, правая часть становится теперь выражением. поэтому вы должны обернуть часть не захвата в виде строк.

Ответ 2

Это невозможно в регулярном выражении. 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

Ответ 3

Если у вас есть только несколько статей, вы можете просто скопировать его

...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

Математика в регулярном выражении, вы видите ее здесь сначала.