我有这样的网址
http://www.abc.com/h/x/y
我想使用正则表达式从中解析“x/y”。我正在使用以下正则表达式
h/(?<Group>[\s\S]*?)\s*?/
但它只匹配“x”,但我想要“x/y”。我可以使用编程语言找到“/”的第二次出现,然后对其进行解析,但我只想从正则表达式中进行。
请帮忙。
我有一个更简单的解决方案。请进行 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.
我不会使用正则表达式,而只是:
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 可以在实际解析之前单独完成)
最终的正则表达式最喜欢取决于您想要解析的有效 URL,例如是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
.