Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_String_Delimiter_Quantifiers - Fatal编程技术网

Regex 正则表达式量词-两个字符之间的数量相同

Regex 正则表达式量词-两个字符之间的数量相同,regex,string,delimiter,quantifiers,Regex,String,Delimiter,Quantifiers,我试图查找两个字符之间的所有文本,但有时字符串包含分隔符 例如,如果我使用 (.*?)=(.*?),* 在以下字符串上: color=blue,weight=100kg, color=blue,red,weight=100kg, 这将导致: match #1: color=blue match #2: weight=100kg match #1: color=blue match #2: red,weight=100kg 但是,如果我有以下字符串: color=blue,weight=

我试图查找两个字符之间的所有文本,但有时字符串包含分隔符

例如,如果我使用

(.*?)=(.*?),*
在以下字符串上:

color=blue,weight=100kg,
color=blue,red,weight=100kg,
这将导致:

match #1: color=blue
match #2: weight=100kg
match #1: color=blue
match #2: red,weight=100kg
但是,如果我有以下字符串:

color=blue,weight=100kg,
color=blue,red,weight=100kg,
这将导致:

match #1: color=blue
match #2: weight=100kg
match #1: color=blue
match #2: red,weight=100kg
如何使正则表达式返回以下内容?(在逗号字符最后一次出现时剪切字符串)

请注意,用逗号分隔的颜色数量可能超过3,或者根本没有


提前感谢,

稍微玩弄一下否定字符类,您应该能够将其与

[^=,]+=(?:[^=,]+|,(?![^,=]+=))+
这和

  • [^=,]+
    所有不是逗号或
    =
  • =
    以下内容
    =
  • (?:[^=,]+|,(?=[^,=]+,)+
    所有不是逗号或逗号后面没有逗号的东西-尽可能多地重复

请参见

稍微玩转否定字符类,您应该能够将其与

[^=,]+=(?:[^=,]+|,(?![^,=]+=))+
这和

  • [^=,]+
    所有不是逗号或
    =
  • =
    以下内容
    =
  • (?:[^=,]+|,(?=[^,=]+,)+
    所有不是逗号或逗号后面没有逗号的东西-尽可能多地重复

请参见

您可以使用此正则表达式:

[^,]+=[^=]+(?=,)
其中

[^,]+
-参数名称

[^=]+(?=,)
-这将捕获允许包含所有内容的参数值,但
=
符号应以逗号结尾


您可以使用以下正则表达式:

[^,]+=[^=]+(?=,)
其中

[^,]+
-参数名称

[^=]+(?=,)
-这将捕获允许包含所有内容的参数值,但
=
符号应以逗号结尾


语义:如果我们处理的是整个输入字符串,那么匹配不是任务,拆分是任务

这使得模式更加简单<代码>~,(?=[^,]+=)~您需要匹配逗号(使用它),后跟非逗号,然后是等号。先行进行必要的工作,真正的分隔逗号在此过程中被销毁

Regex101:

一个PHP实现:()

输出:

array (
  0 => 'color=blue,red',
  1 => 'weight=100kg',
  2 => 'another=one,two,three,four',
  3 => 'okay=enough',
)

语义:如果我们处理的是整个输入字符串,那么匹配不是任务,拆分是任务

这使得模式更加简单<代码>~,(?=[^,]+=)~您需要匹配逗号(使用它),后跟非逗号,然后是等号。先行进行必要的工作,真正的分隔逗号在此过程中被销毁

Regex101:

一个PHP实现:()

输出:

array (
  0 => 'color=blue,red',
  1 => 'weight=100kg',
  2 => 'another=one,two,three,four',
  3 => 'okay=enough',
)

不要用点来描述键,而是使用一个不包括逗号(以及等号)的字符类。正则表达式应该适合什么语言/环境?您是如何实现此模式的。我们需要一个问题的语言标签@Haddock@mickmackusa这个问题已经在两年前得到了回答,但感谢您的关注!您可以在多种环境和语言中使用正则表达式。我的问题是以正则表达式语法为中心,独立于任何编程语言。这是一个非常不幸的字符串,您正试图解析它。当值可以包含定界字符时,是时候重新访问数据结构了。您的示例文本是整个字符串吗?或者文本是大部分文本的子字符串?拆分函数调用可以吗?您的输入如何变化?是否有两个以上的子字符串?更少?与其用点来描述键,不如使用一个不包含逗号(以及等号)的字符类。正则表达式应该适用于什么语言/环境?您是如何实现此模式的。我们需要一个问题的语言标签@Haddock@mickmackusa这个问题已经在两年前得到了回答,但感谢您的关注!您可以在多种环境和语言中使用正则表达式。我的问题是以正则表达式语法为中心,独立于任何编程语言。这是一个非常不幸的字符串,您正试图解析它。当值可以包含定界字符时,是时候重新访问数据结构了。您的示例文本是整个字符串吗?或者文本是大部分文本的子字符串?拆分函数调用可以吗?您的输入如何变化?是否有两个以上的子字符串?越来越少了?所以
([^,]+=[^=]+(?=,),(.*)
所以
([^,]+=[^=]+(?=,),(.*)