0

I'm trying to extract numbers inside an URL with regex.

Example Input: http://localhost:23089/generic-url-segment-c?p=5

Expected Output : 5

Example Input: http://localhost:23089/generic-url-segment-c?p=12&sort=5

Expected Output: 12

First I tried to look for the numbers with a mixture of string.replace,string.indexof and substring but thought Regex would be easier.

So far I tried using ((p=)?=.) but can't get the 5 only.

And also as shown in second example, this value might be a two digit value or there even might be other parameters after it. So maybe a search between p= and & is necessary but I don't know how Regex behaves in absence of parameters.

3
  • Use right to left option and then simply use \d+ Commented Aug 21, 2017 at 15:51
  • 2
    If you have linked to System.Web it might be more reliable to use the following: HttpUtility.ParseQueryString(new Uri("your url here").Query)["p"] Commented Aug 21, 2017 at 16:29
  • Thanks @MartinBrown, this looks like a more solid way Commented Aug 22, 2017 at 6:06

2 Answers 2

3

Try the below pattern. The plus matches 1 or more so you can get 1 or more digits -

 p=(\d+)

The brackets are a group so to get the value of the match within the group use

match.Groups[1].Value
Sign up to request clarification or add additional context in comments.

4 Comments

What language are you using? Look at the 'group' under match info on regex101, you will see only the 5 is matched
@EgeBayrak You need to match group 1 rather than the full match.
Ok I managed to get 5 by using match.Groups[Index].Value, if you can modift your answer to include this I can accept it as correct answer
@EgeBayrak: Be aware that regex matches 5 in group=5 or anythingThatEndWith_p=5
2

You could use lookbehind:

(?<=\bp=)\d+

or

(?<=[?&]p=)\d+

Usage:

Regex.Match(str, @"(?<=[?&]p=)\d+").Value;

2 Comments

Or (?<=\b\?p=)\d+ to be more specific => C# usage: Regex.Match(str, @"(?<=\b\?p=)\d+").Value; ;).
@shA.t: Thanks edited, 've added the possibility of &

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.