C# 字符串来解析URL

C# 字符串来解析URL,c#,regex,C#,Regex,从“JavaScript:the good parts”(第66页)中获得了这个正则表达式字符串。不能让它工作。有人能看出它有什么问题吗 /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/ 它应该像这样分开一根线: 分为:方案、斜杠、主机、端口、路径、查询、哈希 顺便说一句:这个正则表达式需要是通用的。。。它将用于不同的“方案”也许这不是您的目标,但

从“JavaScript:the good parts”(第66页)中获得了这个正则表达式字符串。不能让它工作。有人能看出它有什么问题吗

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/
它应该像这样分开一根线:

分为:方案、斜杠、主机、端口、路径、查询、哈希


顺便说一句:这个正则表达式需要是通用的。。。它将用于不同的“方案”

也许这不是您的目标,但是为什么不使用
System.Uri
类呢

它具有您想要的内容,并解析原始URI/URL


也许这不是您的目标,但是为什么不使用
System.Uri
类呢

它具有您想要的内容,并解析原始URI/URL


您的问题被标记为
c
,那么您为什么不直接使用这个类呢

乙二醇


你的问题用
c#
标记,那么你为什么不直接使用这个类呢

乙二醇


如果这是在Javascript中,请尝试

result = subject.match(/\b(https?|ftp):\/\/([\-A-Z0-9.]+)(\/[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#\/%=~_|!:,.;]*)?/ig);

如果这是在Javascript中,请尝试

result = subject.match(/\b(https?|ftp):\/\/([\-A-Z0-9.]+)(\/[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#\/%=~_|!:,.;]*)?/ig);

我真的不知道,正则表达式所有部分的含义是什么,但是最后一个字符应该用反斜杠转义

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:\#(.*))?$/

我真的不知道,正则表达式所有部分的含义是什么,但是最后一个字符应该用反斜杠转义

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:\#(.*))?$/


通用的计划?你是什么意思?你试过使用System.Uri类来做这件事吗?你能发布一个示例输入和任何错误消息吗?或者输出实际上是什么?scheme=http/https/ftp/etcI我没有收到错误。它根本不会拆分字符串。通用?计划?你是什么意思?你试过使用System.Uri类来做这件事吗?你能发布一个示例输入和任何错误消息吗?或者输出实际上是什么?scheme=http/https/ftp/etcI我没有收到错误。它根本不会拆分字符串。此外,它对于方案也不是通用的。看起来它与https/ftpDidn绑定。我看不出C#only Javascript和Sgtz的含义是正确的。它仅限于https和ftp,但您可以轻松地将其扩展以添加其他内容。因此,它对于方案来说不是通用的。看起来它与https/ftpDidn绑定,看不出C#only Javascript和Sgtz的含义是正确的,它仅限于https和ftp,但您可以轻松扩展它以添加其他使用@“…”来定义字符串,因此不需要转义。@Sgtz是的。必须转义正则表达式字符,而不是C#。问号是regex元字符-使前面的元素可选。使用@“…”定义字符串,因此不需要转义。@sgtz是的。必须转义正则表达式字符,而不是C#。问号是regex元字符-使前面的元素可选。+1:ty这是我将使用的答案。。。但我仍然对正则表达式感到困惑。+1:ty这是我将使用的答案。。。但我仍然对正则表达式感到困惑。+1:ty。这是我将使用的答案,但我仍然对正则表达式感到困惑。谢谢你提到这个方法。因为这是一个正则表达式问题,我们需要一个正则表达式的答案,还是在SO用法下允许另一个答案?回答问题也是如此。如果您要求一些解决方案,但得到了另一个满足您需求的解决方案,则没有问题。如果解决了问题,一个人会将答案标记为正确答案,而其他人可能会在某一天回答为什么你的正则表达式不起作用,因为这个问题会一直打开:)+1:ty。这是我将使用的答案,但我仍然对正则表达式感到困惑。谢谢你提到这个方法。因为这是一个正则表达式问题,我们需要一个正则表达式的答案,还是在SO用法下允许另一个答案?回答问题也是如此。如果您要求一些解决方案,但得到了另一个满足您需求的解决方案,则没有问题。如果解决了问题,其中一个会将答案标记为正确答案,而其他人可能会在某一天回答为什么您的正则表达式不起作用,因为这个问题将继续开放:)