正则表达式重复模式由逗号分隔

时间:2017-01-18 01:04:07

标签: regex

我有这个正则表达式验证字符串是否有效作为一组三个参数,如下所示:

(?<set>(?<field>(.+))\s*\,\s*(?<Type>(.+))\s*\,\s*(?<value>(\?)))

适用于此字符串

FIELD1,INTEGER,?

如何扩展正则表达式以检查重复集,例如

FIELD1,INTEGER,?,FIELD2,INTEGER,?,FIELD1,STRING,?

1 个答案:

答案 0 :(得分:0)

首先要删除其中的几个组(在您指定的捕获组中),您必须使正则表达式更加清晰。然后将?添加到指定捕获组中的+,以便它们不会贪婪。还需要添加一个可选的,和整个完整集的量词,以便在您描述时可以多次重复该组。

                  1                   2                         3    4
                  v                   v                      vvvvvv  vv
(?<set>(?<field>.+?)\s*\,\s*(?<Type>.+?)\s*\,\s*(?<value>\?)(?:[,]*))+?
  1. 删除了您的捕获组并添加了延迟量词:(?<field>(.+)) - &gt; (?<field>.+?)
  2. 与上述相同,但类型为:(?<Type>(.+)) - &gt; (?<Type>.+?)
  3. 添加了一个可选的非捕获组:(?:[,]*)(您不需要[]只是为了清晰)
  4. 模式可以使用惰性量词重复1次或更多次:+?
  5. 有关完整示例,请参阅https://regex101.com/r/USM9lP/1