Home > Net >  conditional regex for selecting strings from end anchor
conditional regex for selecting strings from end anchor

Time:08-01

regex

(?<=\/)(?(?=[0-9]{4,5}$)(somthing 1-1)|(somthing 1-2))

expected result

/12345 -> 45
/123456 -> 456

CodePudding user response:

Your pattern first asserts / to the left from the current position, and then uses an if clause at the current position asserting 4-5 digits till the end of the string string.

If you want to get the last 2 digits when the if clause is true, you would still have to get to the end of the string by matching what comes before you can capture.

You might use 2 capture groups:

(?<=\/)(?(?=[0-9]{4,5}$)\d{2,3}(\d\d)|\d{3}(\d ))

Explanation

  • (?<=\/) Assert / directly to the left
  • (? If clause
    • (?=[0-9]{4,5}$) Assert 4-5 digits till the end of the string
    • \d{2,3}(\d\d) Match 2-3 digits and capture 2 digits
    • | Or
    • \d{3}(\d ) Match 3 digits and capture the rest of 1 digits
  • ) Close the if clause

Regex demo


Instead of using an if clause and a lookbehind, you can also using an alternation:

\/(?:\d{2,3}(\d\d)|\d{3}(\d{3}))$

Regex demo

  • Related