Regex Rascal中正则表达式匹配的大小有限制吗?
在尝试匹配Java源文件中的所有多行注释时,我遇到了一个Regex Rascal中正则表达式匹配的大小有限制吗?,regex,stack-overflow,rascal,Regex,Stack Overflow,Rascal,在尝试匹配Java源文件中的所有多行注释时,我遇到了一个StackOverflow()错误。当匹配的注释相当大时,就会发生这种情况。我已经或多或少地确定了2500个字符的限制,但这可能是特定于我的环境的 我使用以下表达式来匹配注释: /<comment:((\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/))+>/mi //mi 我应该注意的匹配大小是否有一些限制,或者我的正则表达式中是否存在缺陷 我的目标是: |project://Sev
StackOverflow()
错误。当匹配的注释相当大时,就会发生这种情况。我已经或多或少地确定了2500个字符的限制,但这可能是特定于我的环境的
我使用以下表达式来匹配注释:
/<comment:((\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/))+>/mi
//mi
我应该注意的匹配大小是否有一些限制,或者我的正则表达式中是否存在缺陷
我的目标是:
|project://Sevo1/src/Volume.rsc|(985,32,<53,12>,<53,44>): StackOverflow()
at countLines(|project://Sevo1/src/Volume.rsc|(985,33,<53,12>,<53,45>))
at $root$(|prompt:///|(0,73,<1,0>,<1,73>))
|project://Sevo1/src/Volume.rsc|(985,32,,):堆栈溢出()
在计数线上(|project://Sevo1/src/Volume.rsc|(985,33,,))
在$root$(|提示符://|(0,73,,))
不是最佳选择,因为它包含一个*
-量化捕获组,该组包含在字符串内相同位置匹配的备选方案。您可能会看到[^*]
匹配任何字符,但*
(即,它匹配换行符),然后您就有了同样匹配换行符的[\r\n]
。请注意,您匹配的文本块大部分为1个字符长(除了与(\*+([^*\/].[\r\n])
匹配的*
块),而正则表达式引擎在这里似乎无法很好地处理该任务
嵌套量词只有在一次性匹配较长的块时才有效。将模式重新编写为
/<comment:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/>/
//
这样会更有效率。看
详细信息
-a\/\*
子字符串/*
-0多个字符,而不是[^*]*\*+
,后跟一个或多个文字*
*
-0+序列:(?:[^\/*][^*]*\*+)*
-不是[^\/*][^*]*\*+
或/
(与*
匹配),后跟0+个非星号字符([^/*]
),后跟一个或多个星号([^*]*
)\*+
-关闭\/
/
str
类型可能足够大,可以容纳超过2500个字符的信息,这就是我的初始模式的限制。