【发布时间】:2016-02-29 01:50:41
【问题描述】:
我想在一个正则表达式中匹配 c 风格的 cmets。例如
int i /* ABC 123 */
int i // ABC 123
我能写的是
(.*?)(?:/\\*|//)\\s*(ABC)\\s*(\\d)+\\s*
仅匹配
int i /* ABC 123
or
int i // ABC 123
有没有办法在正则表达式中告诉我是否在我的字符串中有 /* 那么 */ 应该在那里,如果它以 // 我不应该匹配 */
如果可能,那么它的正则表达式是什么。
/* / 在 C 中用作多行注释,但在我的情况下,它可能不是多行注释。正如我在示例中给出的那样 -> int i / ABC 123 */ 只是一行。
int i /* ABC 123 */ 和 int i // ABC 123 在 C 语言中都是相同的。因此,如果我一个接一个地遇到它们,我不想编写一个匹配两个正则表达式中的行的正则表达式。
【问题讨论】:
-
你是说你也想做多行搜索吗?
-
这是解析器的任务,而不是正则表达式。
-
您似乎忘记将
\*\/放在正则表达式的尾部以匹配整个评论字符串。 -
不,我没有忘记。如果我将 \*/ 放在正则表达式的尾部,那么使用该正则表达式我无法匹配行 int i // ABC 123,因为我的正则表达式期望 / 在末尾。如果我将 */ 设为可选,则它匹配我不想要的 int i / ABC 123 之类的行。因此,如果我的行在 */ 之前的某处有一个字符 /*,我想要一个带有条件的 \*/。
-
我认为可能有一些简单的解决方案,我不知道使用单个正则表达式。于是问道。如果这很困难,那么我会像你提到的那样将它分开。谢谢。
标签: java regex pattern-matching