我需要从字符串中解析writeln("test");
我使用(?<type>writeln)\((?<args>[^\)]*)\);
作为正则表达式,但这并不完美,如果你尝试解析writeln("heloo :)");
或类似的东西,正则表达式不会解析它(因为引号中的')' )。有没有办法注册,因为')'在引号中,正则表达式应该忽略它,并寻找下一个')'?
谢谢,
最大
答案 0 :(得分:2)
为什么不为此编写一个小解析器?只需遍历字符并拥有一个简单的状态机进行解析。
这种问题在正则表达式中很难做到,因为问题(语法)不规律。在SO中查看parsing HTML with regex;)
但是如果您在某种程度上控制输入,那么您可能只能逃脱正则表达式。在这里查看其他答案的“足够好”的方法。
这基本归结为:
我一直这样做。而且我讨厌自己!
答案 1 :(得分:1)
您遇到了使用正则表达式解析非常规语言时遇到的问题。
话虽如此,试试:
(?<type>writeln)\((?<args>("[^"]*"|))\);
这不完美,但没有什么。
答案 2 :(得分:1)
以下内容将匹配writeln("hello :) \"world\"!");
string regex = "(?<type>writeln)\\(\"(?<args>(\\\\\"|[^\"])*)\"\\);";
我假设这仅适用于单个参数。