我需要解析出 writeln("test");
来自一个字符串。
我用的是 (?<type>writeln)\((?<args>[^\)]*)\);
作为正则表达式,但这并不完美,如果您尝试解析 writeln("heloo :)");
或类似的东西,正则表达式不会解析它(因为引号中的')')。有没有办法注册,因为 ')' 在引号中,正则表达式应该忽略它,并寻找下一个 ')'?
谢谢,
最大
最佳答案
为什么不为此编写一个小解析器呢?只需遍历字符并有一个用于解析的简单状态机。
这种问题在正则表达式中很难做,因为问题(语法)不是正则的。查找parsing HTML with regex所以 ;)
但是:如果您在一定程度上控制您的输入,那么您也许可以摆脱正则表达式。请在此处查看其他答案以了解“足够好”的方法。
这基本上可以归结为:
- 决定兔子洞有多深(你想模拟多少“递归”)
- 为每个这样的递归创建一个替代(分支)正则表达式
- 下次您需要更改正则表达式时,请戳出您的眼睛
我经常这样做。我为此恨自己!
关于c# - 复杂的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3184460/