首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个值的正则表达式命名捕获组

具有多个值的正则表达式命名捕获组
EN

Stack Overflow用户
提问于 2010-12-15 00:31:43
回答 1查看 2K关注 0票数 1

我似乎经历了一个艰难的正则表达式周。任何能救我免于把我的笔记本电脑扔出窗外的人都能得到一瓶虚拟啤酒。我有一些以下形式的数据:

代码语言:javascript
复制
... f=something group="First Group,Group2" foo=val ...

其中组的数量可以变化。我需要将每个组条目捕获到一个命名捕获中。基于previous post,这里的不同之处在于我没有一个常量可以在值中键控(即ID-1-1,ID-2-2允许我说ID-\d+-\d+,而这些值可以是几乎任何值)。我已经尝试了大量的东西,但我倾向于得到太贪婪的匹配,或者我(通常)得到以下两个值:

代码语言:javascript
复制
First Group
First Group,Group2

我需要的是:

代码语言:javascript
复制
First Group
Group2
...

我目前正在尝试正则表达式,我试图锚定到group=“部分,并且不超过结尾":

代码语言:javascript
复制
(?:(?:group=\")|(?:\"))(?<group>(?:(.+)+?)

希望有人能让我的一天过得更好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-15 02:49:12

下面是PHP解决方案。再一次,正则表达式不喜欢捕获多个值,所以我们需要将其分成两个搜索。一个提取组值,下一个提取组中的每个值

代码语言:javascript
复制
$test = 'f=something group="First Group,Group2" foo=val';
$re = '/(?:group=)?\x22(?<group>(?:[^\x2C]+\x2C*)+)\x22/';
$_ = null;
if (preg_match($re,$test,$_))
  echo "Group Contents: ".$_['group']."\r\n";

$__ = null;
$re = '/(?:^|\x2C)(?<value>(?:[^\x2C]+)+)/';
if (preg_match_All($re,$_['group'],$__))
  echo "Group Values: ".print_r($__['value'],true);

移植到另一种语言应该很容易,只需提取正则表达式并以通常的方式管理它们即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4441527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档