ruby, using regex to find something in between two strings

后端 未结 4 476
醉话见心
醉话见心 2021-02-04 06:37

Using Ruby + regex, given:

starting-middle+31313131313@mysite.com

I want to obtain just: 31313131313

ie, what is between

4条回答
  •  被撕碎了的回忆
    2021-02-04 07:21

    Here is a solution based on regex lookbehind and lookahead.

    email = "starting-middle+31313131313@mysite.com"
    regex = /(?<=\+).*(?=@)/
    regex.match(email)
    => #
    

    Explanation

    1. Lookahead is indispensable if you want to match something followed by something else. In your case, it's a position followed by @, which express as (?=@)

    2. Lookbehind has the same effect, but works backwards. It tells the regex engine to temporarily step backwards in the string, to check if the text inside the lookbehind can be matched there. In your case, it's a position after +, which express as (?<=\+)

    so we can combine those two conditions together.

    lookbehind   (what you want)   lookahead
        ↓              ↓             ↓
     (?<=\+)           .*          (?=@)
    

    Reference

    Regex: Lookahead and Lookbehind Zero-Length Assertions

提交回复
热议问题