1

我正在尝试使用 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çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\]))

只要值不包含空格就可以工作。请你帮助我好吗?

提前致谢

4

2 回答 2

0

我没有在 boost 中尝试过这个,但以下应该可以工作:

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

请注意,您的规则行a7不会解析。

于 2013-11-02T11:24:07.190 回答
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,他告诉了我需要集中精力的正确方向。

于 2013-11-03T01:08:35.813 回答