gpt4 book ai didi

regex - 匹配正则表达式字符串中的多个值

转载 作者:行者123 更新时间:2023-12-01 10:47:14 25 4
gpt4 key购买 nike

我试图在字符串中捕获一个或多个变量,而不仅仅是找到的第一个值。我创建了一个测试正则表达式

color.*?(?<COLOR>(red|blue|black)).*?.

和测试句
favorite colors are red, blue and black.  Mr. Green

可以在这里看到 http://regex101.com/r/vV7bP3/2

我的目标是为每个红色、蓝色和黑色匹配,而不是在句点之后匹配绿色。换句话说,在一个带有“颜色”这个词的句子中寻找所有颜色的匹配,但只能到下一个时期(我知道这是一个由两部分组成的问题,我认为这比发布两次更容易。

最佳答案

要查找单词颜色和点之间的几种颜色,您可以在全局搜索中使用此模式(兼容 PHP/PCRE、Perl、Ruby 2.0、Java、.NET):

(?:\G(?!\A)|\bcolors?\b)[^.]+?\b(?<colors>red|bl(?:ue|ack))\b

这个想法是使用 \G匹配上次匹配结果结尾的 anchor 。此技术在模式的开头(在非捕获组中)使用两个入口点。

第一个匹配结果使用单词“color”作为模式的入口点,下一个匹配结果使用带有 \G 的入口点。 anchor 。

[^.]是唯一使用的字符类,在点之后无法获得其他结果。 (请注意,这可能会导致 Mr. 之类的缩写或 U.S.A. 之类的首字母缩写词出现问题)

注意:您可以通过添加 .*? 来减少正则表达式引擎的工作。在“颜色”之前(这样可以避免使用 2 个入口点一一测试“颜色”之前的所有字符):
(?:\G(?!\A)|.*?\bcolors?\b)[^.]+?\b(?<colors>red|bl(?:ue|ack))\b

或者您可以在开始时移动单词边界以更快地失败(因为每个匹配都以单词边界结束):
\b(?:\G(?!\A)|colors?\b)[^.]+?\b(?<colors>red|bl(?:ue|ack))\b

关于regex - 匹配正则表达式字符串中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495183/

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