Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 命名为组的正则表达式是否按任意顺序匹配?_C#_Regex - Fatal编程技术网

C# 命名为组的正则表达式是否按任意顺序匹配?

C# 命名为组的正则表达式是否按任意顺序匹配?,c#,regex,C#,Regex,我有以下字符串 "lu=Rg3vHJ; Expires=Tue, 15-Jan-2013 21:47:38 GMT; Path=/; Domain=.example.com; HttpOnly" 我可以使用以下模式来获取命名组 (?<name>.+?)=(?<value>[^;]+)(?:; Expires=(?<expires>[^;]+))?(?:; Path=(?<path>[^;]+))?(?:; Domain=(?<domain&

我有以下字符串

"lu=Rg3vHJ; Expires=Tue, 15-Jan-2013 21:47:38 GMT; Path=/; Domain=.example.com; HttpOnly"
我可以使用以下模式来获取命名组

(?<name>.+?)=(?<value>[^;]+)(?:; Expires=(?<expires>[^;]+))?(?:; Path=(?<path>[^;]+))?(?:; Domain=(?<domain>[^;]+))?(?:; (?<httponly>HttpOnly))?(?:; (?<secure>Secure))?
如何使模式适用于任何顺序的组?

您可能可以使用:

^(?<name>.+?)=(?<value>[^;]+)(?:(?=.*(?:Expires=(?<expires>[^;]+))))?(?:(?=.*(?:Path=(?<path>[^;]+))))?(?:(?=.*(?:Domain=(?<domain>[^;]+))))?(?:(?=.*(?<httponly>HttpOnly)))?(?:(?=.*(?<secure>Secure)))?
(?+)=(?[^;]+)(?:(?*(?::Expires=(?[^;]+)))(?:(?=*(:Path=(?[^;]+)))(?:(?=*(:域=(?[^;]+))(?:((?=*(.HttpOnly))(?:(?:(?=*(?=.*安全))?

这不是一个美丽的景象,但确实起了作用。这里使用Lookaheads是因为它们不使用匹配项,因此可以匹配前面的任何地方,而不会妨碍其他匹配项


使用多个正则表达式肯定会更易于维护。

为什么不使用多个正则表达式呢?
lu=Rg3vHJ; Path=/; Expires=Tue, 15-Jan-2013 21:47:38 GMT; Domain=.example.com; HttpOnly"
^(?<name>.+?)=(?<value>[^;]+)(?:(?=.*(?:Expires=(?<expires>[^;]+))))?(?:(?=.*(?:Path=(?<path>[^;]+))))?(?:(?=.*(?:Domain=(?<domain>[^;]+))))?(?:(?=.*(?<httponly>HttpOnly)))?(?:(?=.*(?<secure>Secure)))?