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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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_Go - Fatal编程技术网

Regex 在括号外用逗号标记

Regex 在括号外用逗号标记,regex,go,Regex,Go,我正在拼命尝试标记具有以下格式的筛选器字符串: price:gte:5.99,price:lte:10.00,model:in:[test1,test2] 陷阱在于逗号不仅用于分隔过滤器选项,还用作选项列表的分隔符:[test1,test2] 应用标准的正则表达式标记器表达式[^,]+可以得到: price:gte:5.99 price:lte:10.00 model:in:[test1 test2] 但是,很明显,我想要: price:gte:5.99 price:lte:10.00 mo

我正在拼命尝试标记具有以下格式的筛选器字符串:

price:gte:5.99,price:lte:10.00,model:in:[test1,test2]
陷阱在于逗号不仅用于分隔过滤器选项,还用作选项列表的分隔符:
[test1,test2]

应用标准的正则表达式标记器表达式
[^,]+
可以得到:

price:gte:5.99
price:lte:10.00
model:in:[test1
test2]
但是,很明显,我想要:

price:gte:5.99
price:lte:10.00
model:in:[test1,test2]

我怎样才能做到这一点呢?

golang regex不支持lookaheads断言,这使得这项任务更加困难

您可以使用以下替代方式使用此正则表达式:

[^][,]*(?:\[[^][]*\])+|[^,]+

详细信息:

  • [^][,]+
    :匹配1+个字符,这些字符不是
    [
    ]
  • (?:\[[^][]*\])+
    :匹配
    [
    ]
    之间的文本。匹配此组中的一个或多个
  • |
    :或
  • [^,]+
    :匹配1+个非逗号字符

golang regex不支持lookaheads断言,这会使此任务更加困难

您可以使用以下替代方式使用此正则表达式:

[^][,]*(?:\[[^][]*\])+|[^,]+

详细信息:

  • [^][,]+
    :匹配1+个字符,这些字符不是
    [
    ]
  • (?:\[[^][]*\])+
    :匹配
    [
    ]
    之间的文本。匹配此组中的一个或多个
  • |
    :或
  • [^,]+
    :匹配1+个非逗号字符

    • 这可能是一个选项:

      解释

      (?: # Non capturing group [^][,\n]+\[[^]]+\] # Match not a comma newline ] or [, then match between [] | # Or [^,\n]+ # Match not a comma or a newline ) # Close non capturing group (?:#非捕获组 [^][,\n]+\[^]+\]\不匹配逗号换行符]或[,然后在[]之间匹配 |#或 [^,\n]+#不匹配逗号或换行符 )#关闭非捕获组 编辑:
      正如@anubhava所建议的,在字符类中添加了
      ][
      ,使其成为
      [^][,\n]
      ,以防止不必要的回溯。

      这可能是一个选项:

      解释

      (?: # Non capturing group [^][,\n]+\[[^]]+\] # Match not a comma newline ] or [, then match between [] | # Or [^,\n]+ # Match not a comma or a newline ) # Close non capturing group (?:#非捕获组 [^][,\n]+\[^]+\]\不匹配逗号换行符]或[,然后在[]之间匹配 |#或 [^,\n]+#不匹配逗号或换行符 )#关闭非捕获组 编辑:
      正如@anubhava建议的那样,在角色类中添加了
      ][
      ,这样就变成了
      [^][,\n]
      ,以防止不必要的回溯。

      Regex101游乐场链接是什么。你的regex风格是什么?@anubhava GolangRegex101游乐场链接是什么。你的regex风格是什么?@anubhava Golangex101谢谢,但这不适用于:
      model:in:[test1,test2],价格:gte:5.99,价格:lte:10.00
      谢谢,但这不适用于:
      model:in:[test1,test2],price:gte:5.99,price:lte:10.00
      谢谢,我会将你的答案标记为已接受,因为你是第一个使用有效解决方案的人。否则,@anubhava regex模式也适用于我。@AndrejsCainikovs:请不要将此评论视为冒犯性的评论,只是一个小的更正。我的工作编辑时间是在回答之前8秒:),但当然应该是这样OP有权接受任何答案。@anubhava:我期待着这样的评论。我能说什么?我真的很犹豫,但不幸的是,这样做的目的不是让我可以接受两个答案。我给第四只鸟一个优先选择,原因有两个:他首先发布了一个有效的解决方案,而此时他拥有6.7k的声誉,而不是472k你的。我不认为你有太多的声誉,不。这是你应得的,我非常尊重。但因为我是一个超级SO粉丝,激励那些名声不好或一般的人是我个人的特权。如果我可以建议的话,请在你的代码中使用
      (?:[^][,\n]+\[^]+\].[^,\n]+)
      +开始时会导致大量大文本回溯。@anubhava关于回溯的评论非常有价值。谢谢你!谢谢,我会将你的答案标记为已接受,因为你是第一个提出有效解决方案的人。否则,@anubhava正则表达式模式也适用于我。@AndrejsCainikovs:请不要将此评论视为不正确ensive但只是一个小小的更正我的工作编辑在回答之前8秒:)但当然,OP有权接受任何答案。@anubhava:我期待着这样的评论。我能说什么?我真的很犹豫,但不幸的是,这样的设计不是为了让我可以接受两个答案。我给了第四只鸟一个p推荐理由有两个:他第一次发布了一个有效的解决方案,现在他有6.7k的声誉,而你的声誉是472k。我不认为你有太多的声誉,不。这是你应得的,我非常尊重。但因为我是一个超级超级粉丝,激励那些声誉不高或一般的人是我个人的特权。如果我可以的话建议,请在您的代码中使用
      (?:[^][,\n]+\[^]+\].[^,\n]+)
      ,因为
      [^,]+
      一开始会导致大量大文本的回溯。@anubhava关于回溯的评论非常有价值。谢谢你!