C#-使用正则表达式匹配网址中的几个特定单词

时间:2018-09-13 19:20:59

标签: c#

我尝试制作一个仅保存带有以下内容的网址的工具: page_id?id = 1'

http://mechanikrolniczy.cba.pl/viewtopic.php?p=16176'
http://all-tubes-jenna-haze.mzs-dgd.ru/index.php?route=product&product_id=9108429'
https://websetnet.net/page/40/?q=%2Fbs%2Fpage%2F40%2F&loginid=117cee5a78'

在第一个URL中,您可以看到:.php?p = 16176',在第二个URL product_id = 9108429'

,并且在每个URL中都可以不同...

所以我想使用正则表达式仅查找以?something = numberORwords'开头的单词 我必须确保它以'

结尾

过去2个小时我一直在尝试这样做,但是由于某种原因我无法这样做...我什至想到了这样的事情:

^&/]\Wpage_id\W[=0-9]+|\W?item_id\W[=0-9]+|\W?p\W[=0-9]+\Wview\W[=0-9]+\Wno\W[=0-9]+|\Wimage_id\W[=0-9]+|\Wv\W[=0-9]+|\Wsequence\W[=0-9]+|\Wid\W[=0-9]+|\Wstart\W[=0-9]+[']

我的代码:

 string pattern = @"([?][\w]+[=][\w]+)[']";
        foreach(string s in urls)
        {
            Match m = Regex.Match(s, pattern);
            if (m.Success)
            {
                Valid.Add(s);
                Console.WriteLine(s);
            }
        }

编辑: 我想做的是查看网站的参数后面是否有“”,它可能容易受到SQL注入的攻击。<​​/ p>

1 个答案:

答案 0 :(得分:1)

此模式涵盖了以上示例中存在的所有情况。

([?][\w]+[=][\w]+)?([&][\w]+[=][\w]+)*[']

我们正在寻找以下情况:

  • ?someWord=numbersOrletters(第一个捕获组)
  • &someWord=numbersOrletters(第二捕获组)
  • '字符(最后一个子句)结尾

如果修剪并清洁了字符串,则可以在模式的末尾添加$,以确保'位于字符串的末尾。

我使用regexr.com来构建和测试这些东西,这是一个非常有用的工具。

edit:此模式捕获您发布的第二个URL中的子字符串route=product。如果要避免这种情况,可以更改模式以搜索数字字符串\d而不是单词\w(单词也可以包含数字,但数字不能包含字母字符)。< / p>