0

我需要使用正则表达式解析类似数组的文本并获取匹配组。我要解析的文本的一个示例是:

['red','green', 'blue']

我想使用匹配组,因为我想提取它们。我正在使用这个正则表达式,但它找到的组并不像我预期的那样:

\[ *('.+?')( *, *('.+?'))* *\]

这个想法是按以下顺序解析:

  • 一个方括号
  • 任意数量的空格
  • 一组:
    • 单引号
    • 任何字符
    • 单引号
  • 零个或多个组:
    • 任意数量的空格
    • 一个逗号
    • 任意数量的空格
    • 一组与
      • 单引号
      • 任何字符
      • 单引号
  • 任意数量的空格
  • 一个方括号

并得到一组每个解析的数组元素。

你能帮助我吗?

提示:测试正则表达式的简单方法是网站http://rubular.com

4

3 回答 3

2

这不会是一个极权主义的答案,但我相当肯定你不能通过“*”来检查空格,至少它可能取决于你使用的语言。

这是一个 C# 正则表达式示例,显示了检查空格的一些语言要求:regex check for white space in middle of string

编辑:我看到你添加了 Ruby 作为你的语言,不幸的是我在 Ruby 中并不冗长,所以我无法帮助你,抱歉。

Edit2:看到你强迫自己进入 Ruby 来调试你的正则表达式语句,我可以建议: http: //www.debuggex.com/它试图保持语言独立?

于 2013-04-19T13:37:19.833 回答
1

试试这个正则表达式:,'([^']+)'它应该给你以下匹配组red,根据rubular.comgreenblue

于 2013-04-19T13:40:11.377 回答
0

您可以使用一个正则表达式匹配任意数量的组:

^\[\s*|(?:\G'([^']+)'\s*(?:,\s*|]$))+

或像这样(应该更高效):

^\[\s*+|(?>\G'([^']++)'\s*+(?>,\s*+|]$))++

这项工作在 ruby​​ 中就像之前问过的那样,在 delphi 中我不知道。

于 2013-04-19T14:09:48.443 回答