【问题标题】:Replacing a dash after a specific string [duplicate]在特定字符串后替换破折号[重复]
【发布时间】:2014-12-23 01:56:55
【问题描述】:

我正在为一个客户开发一个网站,该客户是一家青年足球(足球)俱乐部。他们有很多不同的团队,我在 WordPress 中将它们创建为类别,例如 Under 7s Falcons (slug = under-7s-falcons)。对于网站的一部分,我需要使用类别 slug 链接到每个团队页面,但是这些页面的 URL 格式略有不同:/under-7s/falcons。我一直在尝试使用 PHP 的preg_replace() 函数将/under-##s-falcons 位之后的- 替换为破折号,使其显示为/under-##s/falcons。这是我的代码:

$teamPage = preg_replace("/under-[1-9]{1,2}s-/", "/", $teamPage);

如您所见,我正在尝试匹配 'under' 之后的 -,然后是两位数(每个年龄,最多 16 岁,但我设置了 1-9,因为它更容易)。但是,这只是将整个under-##s 位替换为/。我将如何更改它以便仅将 - 替换为 /

感谢您的帮助:)

【问题讨论】:

  • 无论是后视还是 \K,或者只是捕获并重新插入 $1 领先的东西。

标签: php regex preg-replace


【解决方案1】:

您可以简单地使用 capturing group 来实现此目的。

$teamPage = preg_replace("/(under-[1-9]{1,2}s)-/", "$1/", $teamPage);

或者您可以使用\K 转义序列重置报告匹配的起点,并且不再包含任何以前使用的字符。

$teamPage = preg_replace("/under-[1-9]{1,2}s\K-/", "/", $teamPage);

【讨论】:

  • 嘿,谢谢@hwnd,这很好用。我会更多地关注捕获组:)
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多