gpt4 book ai didi

regex - 条件正则表达式 : return only one group

转载 作者:行者123 更新时间:2023-12-04 12:07:47 30 4
gpt4 key购买 nike

我要匹配的两种类型的 URL:

(1) www.test.de/type1/12345/this-is-a-title.html
(2) www.test.de/category/another-title-oh-yes.html

在第一种类型中,我想匹配“12345”。
在第二种类型中,我想匹配“category/another-title-oh-yes”。

这是我想出的:
(?:(?:\.de\/type1\/([\d]*)\/)|\.de\/([\S]+)\.html)

这将返回以下内容:

对于类型 (1):
Match group 1: 12345
Match group 2:

对于类型 (2):
Match group: 
Match group 2: category/another-title-oh-yes

如您所见,它已经运行良好。
不过,出于各种原因,我需要正则表达式只返回一个匹配组。有没有办法实现这一目标?

最佳答案

Java/PHP/Python

使用 Negative Lookahead 和 Positive Lookbehind 获取索引 1 处的匹配组。

((?<=\.de\/type1\/)\d+|(?<=\.de\/)(?!type1)[^\.]+)

有两个正则表达式模式是 ORed。

第一个正则表达式模式寻找 12345
第二个正则表达式模式寻找 category/another-title-oh-yes .

笔记:
  • 每个正则表达式模式必须与每个 URL 中的一个匹配项完全匹配
  • 在括号内组合整个正则表达式模式 (...|...)并从 [^\.]+ 中删除括号和 \d+在哪里:
    [^\.]+   find anything until dot is found
    \d+ find one or more digits

  • 这是 regex101 上的在线演示

    输入:
    www.test.de/type1/12345/this-is-a-title.html
    www.test.de/category/another-title-oh-yes.html

    输出:
    MATCH 1
    1. [18-23] `12345`
    MATCH 2
    1. [57-86] `category/another-title-oh-yes`

    JavaScript

    试试这个,并在索引 2 处获得匹配的组。
    ((?:\.de\/type1\/)(\d+)|(?:\.de\/)(?!type1)([^\.]+))

    这是 regex101 上的在线演示.

    输入:
    www.test.de/type1/12345/this-is-a-title.html
    www.test.de/category/another-title-oh-yes.html

    输出:
    MATCH 1
    1. `.de/type1/12345`
    2. `12345`
    MATCH 2
    1. `.de/category/another-title-oh-yes`
    2. `category/another-title-oh-yes`

    关于regex - 条件正则表达式 : return only one group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614364/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com