用于在内容迁移后更新 URL 的正则表达式
Regex to update URLs after a content migration
我最近将一些旧内容移到了新站点并更新了一些 URL 结构。我需要对整个数据库执行 find-replace 以更新一些旧链接。如果我知道正则表达式,这会很容易,但我不希望这对 SO 大师来说很容易。
注意:这是 PHP 正则表达式。
查找:
https://api.floodmagazine.com/{number}/{string}/
Result:
https://api.floodmagazine.com/789/foo-bar/
https://api.floodmagazine.com/12345/foo-bar-1/
替换为:
https://floodmagazine.com///
Result:
https://floodmagazine.com/789/foo-bar/
https://floodmagazine.com/12345/foo-bar-1/
这不像搜索 sub-domain (api.floodmagazine.com) 那样容易,因为数据库中有 URL 需要 sub-domain保持(例如图像)。因此 /{number/{string}/
部分是仅查找需要更改的 URL 的重要方法。
我只需要正则表达式部分,我正在使用 WP Migrate 作为数据库更新部分。
感谢您的帮助!
这应该会获取您描述的所有 URL:
(https://floodmagazine.com)(\/)[0-9]*(\/)[A-z-0-9]*(\/)
https:\/\/api.floodmagazine.com\/([0-9]+)\/([A-z0-9._+-]+)\/?
那应该工作。在 regex101 上你必须转义 /
所以我把它留在这里。在您的工具中可能并非如此。
如果您不想尾部斜线是可选的,您可以省略最后一个 ?
。
为避免 URL 由于 WordPress 不一致而导致的错误,您可以使用此 PHP 由 regex101
生成的代码
$re = '/https?:\/\/([^\/]+)\/([^\/]+)\/([^\/]+)\/?/m';
$str = 'https://api.floodmagazine.com/789/foo-bar/';
$subst = 'https://floodmagazine.com///';
$result = preg_replace($re, $subst, $str);
此正则表达式捕获域、ID 和 post 名称。可以捕获特殊情况,如非 HTTPS、特殊字符 ...
并且 return 结果与您的示例中预期的一样
我最近将一些旧内容移到了新站点并更新了一些 URL 结构。我需要对整个数据库执行 find-replace 以更新一些旧链接。如果我知道正则表达式,这会很容易,但我不希望这对 SO 大师来说很容易。
注意:这是 PHP 正则表达式。
查找:
https://api.floodmagazine.com/{number}/{string}/
Result:
https://api.floodmagazine.com/789/foo-bar/
https://api.floodmagazine.com/12345/foo-bar-1/
替换为:
https://floodmagazine.com///
Result:
https://floodmagazine.com/789/foo-bar/
https://floodmagazine.com/12345/foo-bar-1/
这不像搜索 sub-domain (api.floodmagazine.com) 那样容易,因为数据库中有 URL 需要 sub-domain保持(例如图像)。因此 /{number/{string}/
部分是仅查找需要更改的 URL 的重要方法。
我只需要正则表达式部分,我正在使用 WP Migrate 作为数据库更新部分。
感谢您的帮助!
这应该会获取您描述的所有 URL:
(https://floodmagazine.com)(\/)[0-9]*(\/)[A-z-0-9]*(\/)
https:\/\/api.floodmagazine.com\/([0-9]+)\/([A-z0-9._+-]+)\/?
那应该工作。在 regex101 上你必须转义 /
所以我把它留在这里。在您的工具中可能并非如此。
如果您不想尾部斜线是可选的,您可以省略最后一个 ?
。
为避免 URL 由于 WordPress 不一致而导致的错误,您可以使用此 PHP 由 regex101
生成的代码$re = '/https?:\/\/([^\/]+)\/([^\/]+)\/([^\/]+)\/?/m';
$str = 'https://api.floodmagazine.com/789/foo-bar/';
$subst = 'https://floodmagazine.com///';
$result = preg_replace($re, $subst, $str);
此正则表达式捕获域、ID 和 post 名称。可以捕获特殊情况,如非 HTTPS、特殊字符 ... 并且 return 结果与您的示例中预期的一样