Math operations in regex

后端 未结 3 1259
予麋鹿
予麋鹿 2020-11-27 06:58

I need to add a number to a backreference while doing a replace operation.

e.g. I am rewriting a URL

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


        
相关标签:
3条回答
  • 2020-11-27 07:18

    If you only have a few articles you could just brute force it

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

    Math in regex, you see it here first.

    0 讨论(0)
  • 2020-11-27 07:20

    That's not possible in regex. Regex only matches patterns, it doesn't do arithmetic.

    The best you can do is something verbose like:

    match       replace
    
    (\d{6,})    $1
    (\d{5})     1$1
    (\d{4})     10$1
    (\d{3})     100$1
    (\d{2})     1000$1
    (\d)        10000$1
    
    0 讨论(0)
  • 2020-11-27 07:28

    using Perl:

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

    as you've done with e flag, the right part becomes now an expression. so you have to wrap the non-capture part as strings.

    0 讨论(0)
提交回复
热议问题