'Regex TRYING to search with multiple criteria or backwards

Appreciating regex but still beginning.

I tried many workarounds but can't figure how to solve my problem.

String A : 4 x 120glgt

String B : 120glgt

I'd like the proper regex to return 120 as the number after "x". But sometimes there won't be "x". So, be it [A] or [B] looking for one unique approach.

I tried :

  1. to start the search from the END
  2. Start right after the "x"

I clearly have some syntax issues and didn't quite get the logic of (?=)

(?=[^x])(?=[0-9]+)

So looking forward to learn with your help



Solution 1:[1]

As you tagged pcre, you could optionally match the leading digits followed by x and use \K to clear the match buffer to only match the digits after it.

^(?:\d+\h*x\h*)?\K\d+

The pattern matches:

  • ^ Start of string
  • (?:\d+\h*x\h*)? Optionally match 1+ digits followed by x between optional spaces
  • \K Forget what is matched so far
  • \d+ Match 1+ digits

See a regex demo.

If you want to use a lookahead variant, you might use

\d+(?=[^\r\n\dx]*$)

This pattern matches:

  • \d+ Match 1+ digits
  • (?= Positive lookahead, assert what is to the right is
    • [^\r\n\dx]*$ Match optional repetitions of any char except a digit, x or a newline
  • ) Close the lookahead

See another regex demo.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1