正则表达式匹配url目录路径而没有匹配文件名

时间:2016-10-12 00:58:00

标签: java regex

我想要一个匹配

的正则表达式

https://example.com/studio/https://example.com/studio未匹配https://example.com/studio/path-to-file-blah-blahhttps://example.com/studio/path-to-file-blah-blah.html

我尝试https?:\/\/(?:w{3}[.])?example[.]com\/studio\S*但它匹配上面的两个组。

我也尝试了https?:\/\/(?:w{3}[.])?example[.]com\/studio\/?,它只能匹配第一组。但问题是只匹配第二组。请问我该怎么做?

2 个答案:

答案 0 :(得分:1)

我假设您需要解析非结构化文本中的URL。假设有空格字符,新行字符或字符串结尾,以下内容应该适合您。如果网址后面有句号或其他字符,则会失败,但很容易修改以支持其他终止字符。

https?:\/\/(?:w{3}[.])?example[.]com\/studio\/?(?:\s|$)

(?:\s|$)只是说匹配一个空格字符(包括行结尾排成一个新行字符)或匹配字符串的结尾。

Regex Demo

修改

我认为你说第2组是:

https://example.com/studio/path-to-file-blah-blah
https://example.com/studio/path-to-file-blah-blah.html

要匹配这些,您需要以下正则表达式:

https?:\/\/(?:w{3}[.])?example[.]com\/studio\/\S+

我做的唯一更改是最后一个字符是\S*,但应该是\S+

*表示0或更多

+表示1个或更多。

希望这涉及到你正在寻找的东西。如果我仍然关闭,如果你标记了这些组,它会帮助我理解,所以我可以写出正确的正则表达式。

答案 1 :(得分:0)

进一步扩展Nathan的答案,您可以将RegEx的结尾更改为不捕获尾随空格或新行。这将匹配前两种情况:

$olduserdn = "cn=userid,ou=container1,o=org";
$newdestdn = "ou=container2,o=org";
if (preg_match('/^(cn=[A-Za-z0-9]+)\,(.+)/i', $olduserdn, $rdnmatches))
{
    if (ldap_rename($ldapconn, $olduserdn, $rdnmatches[1], $newdestdn, TRUE))
    {
        print("Moved $olduserdn to $rdnmatches[1],$newdestdn");
    }
    else
    {
        print("Failed move because " . ldap_error($ldapconn));
    }
}

要仅匹配第二种情况,请使用:

https?:\/\/(?:w{3}[.])?example[.]com\/studio\/?(?=\s|$)