【问题标题】:Regex with repeating group in any order具有任何顺序重复组的正则表达式
【发布时间】:2022-06-15 12:27:12
【问题描述】:

我需要帮助设置一个正则表达式,它有一个非常具体的开始,一个捕获组,然后是其他可以按任何顺序排列的组。

例子:

c/category-name/f-brand-super-brand/f-hair-porosity-POR

类别 => 类别名称

f-brand => 超级品牌

f-hair-porosity => POR

c/exampleC/f-brand-brandY/f-hair-porosity-my-porosity

类别 => 示例C

f-brand => 品牌Y

f-hair-porosity => 我的孔隙度


这是我已经走了多远: (f-(brand|hair-porosity|shampoo-type)?-?(.*?)(\/|$))

通过使用这个正则表达式,我可以找到我需要的匹配项,并且它可以以任何给定的 f-xxx 顺序工作。

但是我面临的问题是我无法捕获类别名称。我所有的尝试都导致要么只捕获第一个 f-xxx 要么捕获最后一个 f-xxx。

有什么想法吗?

这将放在 wordpress add_rewrite_url 中,所以我需要它是一个单行。

【问题讨论】:

  • 您的正则表达式有 4 个捕获组。请解释他们应该在类别的情况下捕获什么?
  • 你也可以在这里回复我的问题吗?
  • 我需要将类别和子类别名称(如果存在)捕获为一组。我不是专家,所以我创建的组可能比必要的多。

标签: regex wordpress url-rewriting


【解决方案1】:

类别前缀具有不同的模式,以正斜杠 (c/) 结尾,因此您应该为此添加一个选项。

我会建议这个正则表达式:

(\bc\/|\bf-brand-|\bf-hair-porosity-|\bf-shampoo-type-)((?:(?!\/f-).)*)

这将捕获两个组:

* the prefix
* the value

/ 后面没有'f-' 时,它将允许出现在单个匹配项中。这是可以在类别匹配中包含子类别的地方。

【讨论】:

  • 嗨 trincot,就是这样,但我意识到我找不到另一种模式(子类别):c/category-name/sub-category-name/f-brand-super-品牌/f-毛孔率-POR。我尝试将其添加到您提供的内容中,但没有成功。
  • 那么这个“/sub-category-name”的可变部分是什么?它是“名称”部分,还是整个部分?另外:您希望我继续使用我提供的两种解决方案中的哪一种?
  • 网址将类似于 /c/category/f-brand-xxxx/f-hair-porosity-oooo/.... 和 /c/category/subcategory/f-shampoo-type -aaaa/f-brand-www/... 如果有帮助,我不需要区分类别和类别/子类别。 (\bc\/|\bf-brand-|\bf-hair-porosity-|\bf-shampoo-type-)([^\/]*) => 更接近我从一开始的设想.
  • 让我改述一下。无论顺序如何,我都需要捕获类别(+子类别)和 f-xxx-yyy。我能解释一下吗?
  • 好的,所以如果有一个子类别,你想要一个包含两者的匹配项,包括中间的斜杠分隔符?
猜你喜欢
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多