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)))?