我想要一个匹配
的正则表达式 https://example.com/studio/
或https://example.com/studio
未匹配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*
但它匹配上面的两个组。
我也尝试了https?:\/\/(?:w{3}[.])?example[.]com\/studio\/?
,它只能匹配第一组。但问题是只匹配第二组。请问我该怎么做?
答案 0 :(得分:1)
我假设您需要解析非结构化文本中的URL。假设有空格字符,新行字符或字符串结尾,以下内容应该适合您。如果网址后面有句号或其他字符,则会失败,但很容易修改以支持其他终止字符。
https?:\/\/(?:w{3}[.])?example[.]com\/studio\/?(?:\s|$)
(?:\s|$)
只是说匹配一个空格字符(包括行结尾排成一个新行字符)或匹配字符串的结尾。
修改强>
我认为你说第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|$)