【问题标题】:I'm trying to capture data in a web url with regex我正在尝试使用正则表达式在 Web url 中捕获数据
【发布时间】:2021-04-12 14:16:40
【问题描述】:

我正在尝试构建我的正则表达式以匹配我的网址

这里有 2 个示例网址

类别/组织者/bouger/escalade/offre/78934/ 类别/组织者/品尝者/offre/8040/

我想在offre之后得到号码(78934和8040) 以及就在单词 offre 之前的单词(escalade 和 savourer)

我做了几个测试,但没有通过

^category/(((\w)+/){1,3})(\d+)/?$

^category/(((\w)+/){1,3})/offre/(\d+)/?$

https://regex101.com/r/S4MTvK/1

谢谢

【问题讨论】:

  • 试试:^category/\S*/([^/]+)/offre/(\d+)/?$
  • 或者使用量词,在它之后使用额外的捕获组^category(?:/\w+){1,3}/(\w+)/offre/(\d+)

标签: php regex wordpress


【解决方案1】:

您可以在一个组中重复 1+ 个单词字符 (\w+),而不是在一个组中重复单个单词字符 (\w)+

注意不要匹配/offre之前的/,因为它已经在迭代^category/(?:(\w+)/){1,3}中匹配


您可以在非捕获组(?: 内重复捕获组以捕获迭代中的最后一次出现。

^category/(?:(\w+)/){1,3}offre/(\d+)

模式匹配

  • ^ 字符串开始
  • category/ 字面上匹配
  • (?:非捕获组
    • (\w+)/ 捕获组 1,匹配 1+ 个单词字符并匹配 /
  • ){1,3} 关闭非捕获,重复 1-3 次,捕获组 1 包含最后出现的 1+ 个单词字符,即 escaladesavourer
  • offre/ 字面匹配
  • (\d+)捕获组2,匹配1+位数

Regex demo

在 sting 结束前还匹配可选的 /

^category/(?:(\w+)/){1,3}offre/(\d+)/?$

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2017-01-30
    • 1970-01-01
    • 2023-02-18
    • 2017-05-14
    • 2012-02-21
    • 1970-01-01
    相关资源
    最近更新 更多