2017-08-21 32 views
0

URL内の数字を正規表現で抽出しようとしています。特定の文字列部分の後の数字の正規表現

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 

まず私はstring.replacestring.indexofsubstringの混合物で数字を探してみましたが、正規表現が容易になるだろうと思いました。

これまでのところ、私は((p=)?=.)を使用しようとしましたが、5つしか取得できません。

また、2番目の例に示すように、この値は2桁の値である場合もあれば、後に他のパラメータがある場合もあります。だからp=&の間の検索が必要かもしれませんが、私はRegexがどのようにパラメータの不在で動作するのか分かりません。

+0

使用して、あなたは次のように使用する方が信頼性があるかもしれないSystem.Webのためにリンクされている場合は、単にD + – jdweng

+2

\使用:HttpUtility.ParseQueryStringを(新しいウリ( "あなたのURLここをクリックしてください)。クエリ)["p"] –

+0

ありがとう@MartinBrown、これはもっと頑丈な方法です。 –

答えて

2

次のパターンを試してください。プラスは1一致するか、より多くのように、あなたは1桁以上取得することができます - ブラケットはそうあなたが後読み使用することができ、グループの使用

match.Groups[0].Value 
+0

p = 5も返します。私は5だけ必要です。https://regex101.com/r/H8xHn9/1 –

+0

あなたはどの言語を使っていますか? regex101のマッチ情報の下にある 'group'を見ると、5がマッチしただけです。 –

+0

@EgeBayrakあなたはフルマッチではなくグループ1にマッチする必要があります。 – user8478480

1

内のマッチの値を取得するグループです

p=(\d+) 

を:

(?<=\bp=)\d+ 

または

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

使用法:右から左のオプションに

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

またはより具体的には(?<= \ b \?p =)\ d +'> 'Regex.Match(str、@"(?<= \ b \?p =)\ d + ")。 –

+0

@ shA.t:ありがとうございました。 '&'の可能性を追加しました。 – Toto

関連する問題