Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “将正则表达式拆分”&&引用;在URL参数中,仅当其后跟以“结束”结尾的内容时=&引用;_C#_Regex - Fatal编程技术网

C# “将正则表达式拆分”&&引用;在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

我一直试图用格式错误的URL解决一个难题,即特定参数的值可能包含可能与解析URL冲突的特定字符

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都使用了