c# - 复杂的正则表达式问题

标签 c# regex parsing

我需要解析出 writeln("test");来自一个字符串。
我用的是 (?<type>writeln)\((?<args>[^\)]*)\);作为正则表达式,但这并不完美,如果您尝试解析 writeln("heloo :)");或类似的东西,正则表达式不会解析它(因为引号中的')')。有没有办法注册,因为 ')' 在引号中,正则表达式应该忽略它,并寻找下一个 ')'?

谢谢,
最大

最佳答案

为什么不为此编写一个小解析器呢?只需遍历字符并有一个用于解析的简单状态机。

这种问题在正则表达式中很难做,因为问题(语法)不是正则的。查找parsing HTML with regex所以 ;)

但是:如果您在一定程度上控制您的输入,那么您也许可以摆脱正则表达式。请在此处查看其他答案以了解“足够好”的方法。

这基本上可以归结为:

  1. 决定兔子洞有多深(你想模拟多少“递归”)
  2. 为每个这样的递归创建一个替代(分支)正则表达式
  3. 下次您需要更改正则表达式时,请戳出您的眼睛

我经常这样做。我为此恨自己!

关于c# - 复杂的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3184460/

相关文章:

java - NOT 和 AND 在正则表达式中一起运算以匹配不包括 -0.0 的数字(如 1.0、-3、-3.0)

regex - 可选参数 Zend Route Regex

javascript - 替换文本区域的单词

java - 将数据从文件加载到 Vector 结构

c# - AutoMapper 在 IQueryable 上调用 ProjectTo<T>() 时抛出 StackOverflowException

c# - 为什么我可以将无效值解析为 .NET 中的枚举?

C#:使用 XmlTextWriter 清理 XML 文本值?

c# - 是否有不需要虚拟方法的.NET/C# 模拟框架

php - 语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING

c++ - 如何在 C++ 中解析带有换行符的文件作为分隔符?