C# “将正则表达式拆分”&&引用;在URL参数中,仅当其后跟以“结束”结尾的内容时=&引用;
我一直试图用格式错误的URL解决一个难题,即特定参数的值可能包含可能与解析URL冲突的特定字符C# “将正则表达式拆分”&&引用;在URL参数中,仅当其后跟以“结束”结尾的内容时=&引用;,c#,regex,C#,Regex,我一直试图用格式错误的URL解决一个难题,即特定参数的值可能包含可能与解析URL冲突的特定字符 if( remaining.Contains( "?" ) || remaining.Contains( "#" ) ) { if( remaining.Contains( "?" ) ) { Path = remaining.Substring( 0, temp = remaining.IndexOf( "?" ) ); remaining = r
if( remaining.Contains( "?" ) || remaining.Contains( "#" ) )
{
if( remaining.Contains( "?" ) )
{
Path = remaining.Substring( 0, temp = remaining.IndexOf( "?" ) );
remaining = remaining.Substring( temp + 1 );
// Re-encode for URLs
if( remaining.Contains( "?" ) )
{
remaining = URL.Substring( URL.IndexOf( "?" ) + 1 );
}
if( remaining.IndexOf("=") >= 0 )
{
string[] qsps = Regex.Split( remaining, @"[&]\b" );// Original Method: remaining.Split( '&' );
qsps.ToList().ForEach( qsp =>
{
string[] vals = qsp.Split( '=' );
if( vals.Length == 2 )
{
Parameters.Add( vals[0], vals[1] );
}
else
{
string key = (string) vals[0].Clone();
vals[0] = "";
Parameters.Add( key, String.Join( "=", vals ).Substring( 1 ) );
}
} );
}
}
我添加了一行“Regex.Split(剩余,@”[&]\b”);”来抓取“&”,后面跟着一个字符,这似乎很有用
我只是想看看是否有更好的方法只拆分实际用于参数的“&”?
要测试的示例(导致此需要的更新): www.myURL.com/shop/product?utm_src=bm23&utm_med=email&utm_term=apparel&utm_content=2016年2月15日&utm_活动=Last 机会!总统日销售活动:免费送货及更多 工作正则表达式应仅获取以下项的&:
- utm_src=btm23
- utm\U med=电子邮件
- utm_术语=服装
- utm_内容=2016年2月15日
- utm_活动=最后一次机会!总统日销售活动:免费送货及更多李>
它不应将“&More”算作匹配项,因为该节后面不以“=”结尾我想使用这个正则表达式:
Regex.Split(url, @"(?<=(?:=\S+?))&",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
请注意输出的第一行
www.myURL.com/shop/product?utm_src=bm23
它包含url的第一个路径,但可以通过
?
轻松拆分。我想使用以下正则表达式:
Regex.Split(url, @"(?<=(?:=\S+?))&",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
请注意输出的第一行
www.myURL.com/shop/product?utm_src=bm23
它包含url的第一个路径,但很容易被
?
分割。我建议使用前瞻性的正则表达式:
/&(?=[^&=]+=)/
您可以在此处看到它的效果:。它首先查找&
字符,然后向前“窥视”以确保后面有一个=
,但前提是它不包含另一个&
或介于两者之间的=
您还可以确保URL中没有无效的空白字符(如换行符等)():
我建议使用前瞻性的正则表达式:
/&(?=[^&=]+=)/
您可以在此处看到它的效果:。它首先查找&
字符,然后向前“窥视”以确保后面有一个=
,但前提是它不包含另一个&
或介于两者之间的=
您还可以确保URL中没有无效的空白字符(如换行符等)():
(?m.Value).ToList();
编辑问题编辑:
(?(?m.Value).ToList();
编辑问题编辑:
(?不确定你想做什么,但如果你想发现错误
ampersands,这是一个很好的正则表达式
&(?=[^&=]*(?:&$)
您可以替换为%26
或拆分为它。
如果使用它进行拆分,只需重新组合,错误的符号将消失。不确定要执行的操作,但如果要查找错误的符号
ampersands,这是一个很好的正则表达式
&(?=[^&=]*(?:&$)
您可以替换为%26
或拆分为它。
如果使用它进行拆分,只需重新组合,错误的符号将消失。我不会使用拆分。一个简单的正则表达式匹配就可以了。我使用&来获取参数和值,但试图避免值可能包含“&”的情况在它里面,让它也尝试被拆分;这会触发那个else,并可能引发异常,因为解析这些参数的方法将无法读取它。>。@Doodely,你可以使用regex lookback,它将按照你的预期工作。请参阅我下面的帖子。我不会为此使用拆分。一个简单的regex匹配应该可以做到这一点。我正在吐痰&获取参数和值,但尽量避免值可能包含“&”的情况在它里面,它也会尝试被拆分;这会触发else,并可能引发异常,因为解析这些参数的方法将无法读取它。>@Doodely,您可以使用regex lookback,它将按照您的预期工作。请参阅我下面的帖子。这(?是的,你是对的。如果你看到asker在使用C#,那么它在.net中是有效的。我也用C#发布了答案。啊;我错了。我不知何故认为这是一个Javascript问题,而不是C#/.net。道歉。哦,不,不。不需要道歉。事实上,你的评论将帮助许多可能面临此类问题的其他人。这似乎有效很好,你后来也教了我负面落后是多么有价值!我会做一些进一步的测试,如果这看起来很可靠,我会将其标记为已接受:)!!那(?是的,你是对的。如果你看到asker在使用C#,那么它在.net中是有效的。我也用C#发布了答案。啊;我错了。我不知何故认为这是一个Javascript问题,而不是C#/.net。道歉。哦,不,不。不需要道歉。事实上,你的评论将帮助许多可能面临此类问题的其他人。这似乎有效g非常好,你后来也教我负面落后是多么有价值!我会做一些进一步的测试,如果这看起来可靠,我会将其标记为已接受:)!!你的和@Saleem都使用了落后[落后]|[前进]版本和我将测试这两个版本,因为它们似乎实现了相同的想法!我将使用我发现的内容进行更新并相应标记:)这使我成为匹配4x&
此解决方案非常适合在包含空格的值之后包含参数。Ex)www.site.com/account/login/?test=This&另一个好方法!&what=1它与其他解决方案出现问题的“&what=1”部分相匹配。因此,我可能会继续使用此方法。我会让您知道:)@Doodely一个有效的URL在其参数中永远不会有任何空白,除非进行编码。请搜索,您将在stack overflow和web的其余部分找到大量帖子。所以说,建议的解决方案没有问题。您和@Saleem都使用了