我有这样的网址
http://www.abc.com/h/x/y
我希望使用正则表达式从中解析“x / y”。我正在使用以下正则表达式
h/(?<Group>[\s\S]*?)\s*?/
但它只匹配“x”但我想要“x / y”。我可以使用编程语言找到第二次'/',然后解析它,但我只想从正则表达式做。
请帮忙。
答案 0 :(得分:0)
我不会使用正则表达式,只是简单地说:
var url = "http://www.abc.com/h/x/y";
var ix1 = url.LastIndexOf('/');
var ix2 = url.LastIndexOf('/', ix1 - 1);
var part = url.Substring(ix2 + 1);
这个是可以理解的,无需解释复杂的正则表达式:)
(+验证它是否是有效的url可以在实际解析之前单独完成)
答案 1 :(得分:0)
最终正则表达式最依赖于您要解析的有效网址,例如h
是常数还是可以改变?
我可能会使用这样的东西:
http://(?:[a-z\d\-]+\.)*[a-z\d]+/h/(.*)
http://
)相当明显。(?:[a-z\d\-]+\.)*
量词的非捕获组(*
)将匹配TLD下的所有(子)域,包括最后.
(如果有)。如果给出IP,则将包含IP的第一部分。[a-z\d]+
将匹配TLD或 - 对于Intranet内容 - 与域名(如localhost
)匹配。在给出IP的情况下,这将包含最后一个字节。(.*)
)将捕获/h/
之后的任何内容。此实现有两个缺点:
http://--some-weird.--.com/h/1/2/3
。答案 2 :(得分:0)
我有一个更简单的解决方案。 请进行string.Length验证检查,这是一个快速的模型。
string myString = @"http://www.microsoft.com/products/surface/order/pay.aspx";
char charToFind = '/';
int nthOccuranceToFind = 4;
int startIndex = -1;
int nthPosOfCharToFind = 0;
while (nthOccuranceToFind > 0)
{
int findIndex = startIndex + 1;
startIndex = myString.IndexOf(charToFind, findIndex);
--nthOccuranceToFind;
}
//startIndex here will contain index of nth occurance.