Regex 带有多个值的正则表达式命名的捕获组
我似乎有一个艰难的雷格克斯周。任何能救我免于把笔记本电脑扔出窗外的人都能得到一杯虚拟啤酒。我有以下形式的一些数据:Regex 带有多个值的正则表达式命名的捕获组,regex,Regex,我似乎有一个艰难的雷格克斯周。任何能救我免于把笔记本电脑扔出窗外的人都能得到一杯虚拟啤酒。我有以下形式的一些数据: ... f=something group="First Group,Group2" foo=val ... 组的数量可能会有所不同。我需要将每个组条目捕获到一个命名的捕获。基于a,这里的区别在于,我没有一个常数可以在值中设置关键点(即ID-1-1,ID-2-2允许我说ID-\d+-\d+,而这些值几乎可以是任何值)。我已经尝试了很多东西,但我倾向于得到过于贪婪的匹配,或者我(经
... f=something group="First Group,Group2" foo=val ...
组的数量可能会有所不同。我需要将每个组条目捕获到一个命名的捕获。基于a,这里的区别在于,我没有一个常数可以在值中设置关键点(即ID-1-1,ID-2-2允许我说ID-\d+-\d+,而这些值几乎可以是任何值)。我已经尝试了很多东西,但我倾向于得到过于贪婪的匹配,或者我(经常)得到以下两个值:
First Group
First Group,Group2
我需要的是:
First Group
Group2
...
我目前正在尝试这样的正则表达式,我试图锚定到group=“partion,而不是超过结尾”:
(?:(?:组=\”)|(?:\”)(?(?:(.+)+)
希望有人能让我的日子过得更好…这是PHP解决方案。再说一次,regex不喜欢捕获多个值,所以我们需要将其分为两次搜索。一次提取组值,另一次提取组中的每个值
$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);
$test='f=something group=“第一组,第二组”foo=val';
$re='/(?:group=)?\x22(?(:[^\x2C]+\x2C*)+)\x22/;
$uz=null;
if(预匹配($re,$test,$))
回显“组内容:”..$\u['Group'].“\r\n”;
$\uuux=null;
$re='/(?:^\x2C)(?(?:[^\x2C]+)+)/';
if(预匹配所有($re,$\['group'],$\)
回显“组值:”.print_r($_u['value'],true);
移植到另一种语言应该很容易,只需提取正则表达式并以您通常的方式管理它们。您使用的是哪种语言?我有一个PHP解决方案,但希望尝试满足您使用的需求。此外,我认为不可能在一个正则表达式中提取单独的值(它将始终返回最后一个结果)。因此,您需要将其分为两个问题:确定引号中的值,然后分离逗号值。不在一种语言中。这是一种适用于应用程序的PCRE兼容配置文件格式。我正在尝试找出应用程序中是否也有一种更简单/内置的方式。不幸的是,我不在这方面的编程语言中。:/wher你在应用正则表达式吗?它是应用程序配置文件的一部分。
$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);