我正在尝试使用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çÇñÑáÁéÉíÍóÓúÚ@%\_\\\,\;\:\|\/\&\(\)\-\+\*\^\.(==)\>\<(\<=)(\>=)]+\]))
只要值不包含空格,就可以工作。 你能帮我吗?
提前致谢
答案 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,他告诉我正确的方向,我需要关注。