gpt4 book ai didi

php - 匹配单词的第一次出现并忽略命名组中的重复项

转载 作者:行者123 更新时间:2023-12-05 07:44:55 26 4
gpt4 key购买 nike

我正在编写一个用于练习的 PHP 路由器引擎,我目前正在为它做正则表达式。

一个映射的 URL 可以有参数模式并且像 {type:varName} 这样写下来.我不想让变量名多次出现,即 varName在这种情况下。

我目前有这个正则表达式:

{(?<key>[a-zA-Z]{1,4}):(?<name>[a-zA-Z_]\w*\b)(?!.*\1\b)}

(live version here)

问题是它只检查 <key> 上的重复项组而不是 <name>团体。它还发现最后一个发生而不是第一个找到。

如何制作此正则表达式,使其只匹配第一次出现的 <name>分组并且不匹配第一个匹配项的重复项?


示例

当你有这样的模式时:

{s:varName}-{i:varName}-{s:varName}

只有第一个{s:varName}应该匹配,其他 2 个不应该匹配。

当出现这样的模式时:

{i:varName1}-{d:varName1}-{i:varName2}-{i:varName3}-{m:varName3}

{i:varName1} , {i:varName2}{i:varName3}应该匹配。


更新

感谢@sln,我最终得到了这个正则表达式:

{(?<key>[a-zA-Z]{1,4}):(?<name>[a-zA-Z_]+\b)}(?:(?!.*{[a-zA-Z_]{1,4}:\2))

唯一的问题是它与第一次出现的不匹配,而是与找到的最新出现的匹配。

我在这里做错了什么?

最佳答案

您可以制定解决方法。设置代理名称(多组无重复)并在代码中获取您想要的内容。

如果你想要正则表达式:

{s:varName}-{i:varName}-{s:varName}

写出:

{s:varName-1}-{i:varName-2}-{s:varName-3}

然后写一些逻辑:

  • 获取 varName-* 的所有组(varName-1varName-2varName-3 ),
  • 得到你想要的(例如第一次出现它是varName-1)。

对于这个正则表达式:

{i:varName1}-{d:varName1}-{i:varName2}-{i:varName3}-{m:varName3}

写:

{i:varName1-1}-{d:varName1-2}-{i:varName2-1}-{i:varName3-1}-{m:varName3-2}

同样的逻辑:

  • 获取 varName1-* 的所有组(varName1-1varName1-2),varName2-*varName3-*
  • 从所有多组中获取*-1 (varName1-1, varName2-1, varName3-1)

我使用这个解决方法,因为一些其他语言(例如 Java)不支持重复的组名。

关于php - 匹配单词的第一次出现并忽略命名组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397799/

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