使用Regex进行参数化

时间:2013-11-02 11:08:52

标签: c++ regex boost

我正在尝试使用boost和regex实现c ++解析器。 我需要能够解析如下语句:

parameters a1=bbb b a2=bbb   b  a3 =bbb
parameters  a4=b a5=bb
parameters a6=b  a7=[b b b]  aa8=b b b

对于此输入,所需的参数为:

a1=bbb b
a2=bbb   b
a3 =bbb
a4=b
a5=bb
a6=b
a7=[b b b]
aa8=b b b

其中a和b可以是以下任何一个字符:A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%_ \,;:| /&() - + * ^。<>或以下模式:(==)(< =)(> =) 参数的名称不允许使用空格,但值不行。

我正在尝试下面的代码,但它无法正常运行:

[A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\s*=\s*([\sA-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+(?!(([\sA-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+)?\s*=\s*[\sA-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+))|[A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+|(\[[\sA-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\]))

模式

[A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\s*=\s*([A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+|(\[[\sA-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\]))
只要值不包含空格,

就可以工作。 你能帮我吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

我没有尝试过这种方法,但以下情况应该有效:

((?:[A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%_\\,;:|/&()\-+*^\.<>]|==|<=|>=)+)\s*=\s*((?:[A-Za-z0-9çÇñÑáÁéÉíÍóÓúÚ@%_\\,;:|/&()\-+*^\.<>\s]|==|<=|>=)+)

请注意,您的规则行a7无法解析。

答案 1 :(得分:0)

我想我终于找到了问题的答案。预期的正则表达式是:

\w+\s*=\s*[\w\s]+(?=\s+\w+=)|\w+\s*=\s*[\w\s]+(?!\w+=)|\w+\s*=\s*\[[\w\s]+\]

匹配所有param_name(\ w + \ s *),所有param_value(\ s * [\ w \ s] +或[[\ w \ s] +]列表)。 这个param_value在下一个parameter_name开始的地方结束(?= \ s + \ w + =),如果没有后跟另一个参数(?!\ w + =),则在句子的末尾结束。

所有支持的字符都已被\ w取代,以缩短答案。

感谢所有回答过的人,特别是@pobrelkey,他告诉我正确的方向,我需要关注。