【问题标题】:Capture entire string only if last part meets criteria仅当最后一部分满足条件时才捕获整个字符串
【发布时间】:2019-03-15 01:48:58
【问题描述】:

我有以下网址。

example.com/ie/ie/womens-c-1.html
example.com/ie/womens-c-1.html

如果/ie/ 被指定一次,我只希望正则表达式捕获字符串。

我有一个模式可以捕获到第一个 /ie/

([a-z.-]*)\/([a-z]{2})\/

我无法计算出最后一部分,以确保仅在模式匹配时才捕获字符串

/ie/(*.)-c-([0-9]*).html

我需要使用前瞻或类似的东西吗?

更新:第一个 /ie/ 之后的任何内容都不会包含 / 我可以使用它来帮助构建规则吗?

我希望最终的捕获组如下所示。 (括号内是分组)(example.com)/(ie)/(womens)-c-(1).html

【问题讨论】:

  • 您要匹配ie 出现多次的网址吗?
  • 不,我希望它们被忽略。这是一个 htaccess 文件。所以我不希望匹配解决多个 /ie/
  • 你的帖子有点不清楚。你能添加一些应该匹配的字符串和一些不应该匹配的字符串,说明匹配的逻辑吗?
  • 对于重写规则,使用^(?!.*(/ie/).*\1).*/ie/。没有更多的正则表达式。
  • @PushpeshKumarRajwanshi 完美运行!

标签: regex


【解决方案1】:

如您的帖子中所述,将您的正则表达式扩展为仅匹配 URL,该 URL 有两个字母字符,后跟一个 /,接下来的内容不包含任何进一步的 / 字符,其余信息将进一步收集成两个更多组,

^([a-z.-]*)\/([a-z]{2})\/([^\/]*)-c-(\d*)\.html

Online Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多