Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带有多个值的正则表达式命名的捕获组_Regex - Fatal编程技术网

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);