我尝试制作一个仅保存带有以下内容的网址的工具: 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>
答案 0 :(得分:1)
此模式涵盖了以上示例中存在的所有情况。
([?][\w]+[=][\w]+)?([&][\w]+[=][\w]+)*[']
我们正在寻找以下情况:
?someWord=numbersOrletters
(第一个捕获组)&someWord=numbersOrletters
(第二捕获组)'
字符(最后一个子句)结尾如果修剪并清洁了字符串,则可以在模式的末尾添加$
,以确保'
位于字符串的末尾。
我使用regexr.com来构建和测试这些东西,这是一个非常有用的工具。
edit:此模式捕获您发布的第二个URL中的子字符串route=product
。如果要避免这种情况,可以更改模式以搜索数字字符串\d
而不是单词\w
(单词也可以包含数字,但数字不能包含字母字符)。< / p>