我想基于正则表达式生成一个字符串。我有一个正则表达式和一组子模式的值,如下所示。
表达:your-report-([a-z]+)-not-available
集:array("monthly")
我需要每月更换子模式。我该怎么做?
我同意Kiko Software的观点。您可以将preg_replace与正则表达式一起使用,但可能会使它过于复杂。试试这个:
$parts = explode('-','your-report-([a-z]+)-not-available')
$parts[2] = "monthly"
$final = implode('-', $parts);
阅读和维护IMO要容易得多
我认为你应该用这种方式生成URL。无需为该任务使用正则表达式。
function generateUrl(string $route, array $parameters = [])
{
return str_replace(array_keys($parameters), array_values($parameters), $route);
}
echo generateUrl('/your-report-{type}-not-available', [
'{type}' => 'monthly',
]);
echo PHP_EOL;
echo generateUrl('/client/{clientId}/invoices/{invoiceId}', [
'{clientId}' => 28,
'{invoiceId}' => 768,
]);
上面的例子返回:
/your-report-monthly-not-available
/client/28/invoices/768
如果您打算使用preg_replace
,可以试试这个:
preg_replace('(\w*-\w*-)\w*', '${1}monthly', $string)