正则表达式中的数学运算

Kev*_*vin 26 regex

在进行替换操作时,我需要在反向引用中添加一个数字.

例如.我正在重写一个URL

www.site.com/doc.asp?doc=321&language=1

www.site.com/headline/100321.article

例如,做一个简单的替换,但我需要向doc id添加100,000.我到目前为止所做的工作没有添加任何内容.

s/.*doc=(\d+).*/www.site.com\/headline\/$1.article/g;
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能增加100,000到1美元?

请注意,您不能在数字前添加"100",因为doc id可能> 999.

Met*_*hox 32

使用Perl:

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

正如你已经完成了e旗帜,正确的部分现在变成了一个表达式.所以你必须将非捕获部分包装为字符串.

  • @Kevin,不,不.Perl正在评估`($ 1 + 100000)`部分,正则表达式与此无关.但是,看起来你已经在使用Perl,不是吗? (2认同)
  • 漂亮的Perl伏都教!+1 (2认同)

Bar*_*ers 7

这在正则表达式中是不可能的。正则表达式只匹配模式,它不做算术运算。

你能做的最好的事情是冗长的,比如:

match       replace

(\d{6,})    $1
(\d{5})     1$1
(\d{4})     10$1
(\d{3})     100$1
(\d{2})     1000$1
(\d)        10000$1
Run Code Online (Sandbox Code Playgroud)