java - 多行正则表达式匹配问题

标签 java regex

我尝试通过正则表达式匹配以下字符串:

;IF TEST_DATE <= 200112 THEN E>=90 AND S>=90
 OR P = "25" ENDIF
IF TEST_DATE >= 200201 AND TEST_DATE < 200407 THEN E>=89
AND S>=90 OR P = "25" ENDIF

我正在使用以下正则表达式来尝试匹配从分号(旨在作为注释)直到第一个 ENDIF:

;\s*IF (\d|\D)+ ENDIF

不幸的是,这个模式一直匹配到第二个 ENDIF。我尝试过使用 Java Pattern.DOTALL 以及 (?s) 标志的各种解决方案,但没有成功。

最佳答案

您正在使用greedy量词,因此您的模式(\d|\D)匹配所有内容,直到找到最后一个ENDIF .

如果您希望正则表达式在第一个 ENDIF 处停止匹配,则需要使用不情愿的量词 - +? : -

;\s*IF (\d|\D)+? ENDIF

关于java - 多行正则表达式匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606800/

相关文章:

java - Jackson 如何容忍 json 中错误的参数类型?

python - 正则表达式 Python 在某个单词后添加字符

javascript - 验证格式化的 "time"

javascript - 将 Go Regexp 翻译成 Javascript

java - 散列后的字符串在输出到文件然后输入后不再相同

java - 回滚时取消 ejb 定时器

java - Java 1.6 中不同的日期格式选项应格式化为通用格式

javascript - 将上字符转换为下字符,将下字符转换为上字符(反之亦然)

Javascript:文本字符串到字符数组

java - 使用 shiro 的日期相关登录