java - 使用正则表达式查找 C 风格注释 block (/* */) 但不是字符串内部的注释 block ?

标签 java c regex comments

我的问题是我有一个程序通过标准 C 文件(这里我只使用了一个文本文件)。我能够让它识别注释,但是我无法让它识别字符串中无法识别的注释 block 。例如:

printf("This should be counted as a comment: /* */");

但是,它说既然 if 找到了/* */,它就是真的。我正在使用的正则表达式模式

((['"])(?:(?!\2|\\).|\\.)*\2)|\/\/[^\n]*|\/\*(?:[^*]|\*(?!\/))*\*\/

只需让它包含双引号字符串。

最佳答案

正则表达式无法识别上下文相关(Typ-1)语言。它们只能用于匹配 Typ-3 语言。 Chomsky-Hierarchy

由于您尝试匹配的“语言”不是正则,因此您不能使用正则表达式来解决此问题。

我建议您使用不同的方法。就像手动解析输入一样。 也许对于整个解析正则表达式的一小部分是有用的。

关于java - 使用正则表达式查找 C 风格注释 block (/* */) 但不是字符串内部的注释 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58314057/

相关文章:

Java递归进阶

java - 如何在没有任何 IDE 的情况下运行基本的 Spring MVC 应用程序?

c - 在进程树中查找子进程的级别

java - 从 POS 标签中提取名词词和原句

c++ - std::regex 中的错误?

regex - 基于正则表达式的 grep 不匹配任何内容

java - 从 tomcat 7 升级到 tomcat8.5.41 部署失败

java - 链表中的节点可以有动态数组吗?

C++子对象初始化

c - 在c中连接字符串的最有效方法