gpt4 book ai didi

java - 正则表达式无法匹配 switch case 模式

转载 作者:行者123 更新时间:2023-12-02 04:40:56 27 4
gpt4 key购买 nike

W我们需要解析可能包含 switch case 指令的规则。

当我们考虑使用 Groovy 在 Java 代码中实现这个解析器时,我在 Groovy 中编写了以下代码:

1. class RuleParser {
2. String functionRegex = /(frml[0-9]*)((\s*@[a-zA-Z0-9_]*\s*)?(,\s*@[a-zA-Z0-9_]*\s*)*)/
3. String variableRegex = /@[a-zA-Z0-9_]*/
4. String numberRegex = /\s+[0-9]+/
5. String switchRegex = /switch(\s*1\s*)((\s*|\n)case)+((\s*|\n)default)?/
6. String caseRegex = /case\s*1\s*:\s*1/
7. String defaultRegex = /default\s*:\s*1/
8. String conditionRegex = /1(>=|<=|>|<|==|!=)1/

9. testRule(String rule){
10. try {
11. rule.eachMatch(numberRegex){ match->
12. rule=rule.replaceAll(match, ' 1');
13. }
14. rule.eachMatch(functionRegex){ match->
15. rule=rule.replaceAll(match, '1');
16. }
17. rule.eachMatch(variableRegex){ match->
18. rule=rule.replaceAll(match, '1');
19. }
20. rule.eachMatch(defaultRegex){ match->
21. rule=rule.replaceAll(match, 'default');
22. }
23. rule.eachMatch(caseRegex){ match->
24. rule=rule.replaceAll(match, 'case');
25. }
26. rule.eachMatch(switchRegex){ match->
27. rule=rule.replaceAll(match, '1');
28. }
29. Eval.me(rule)
30. println "run successfully"
31. } catch (Exception e) {
32. e.printStackTrace()
33. }
34. }
35. }

首先,我只是想测试输入规则,以了解它是否根据我们的结构正确,例如,我考虑了下面的规则示例来跟踪代码是否正常工作:

switch(@prm43) 
case 12: @msg13
case 14: @msg32
default: @msg100

它一直工作到第 26 行,当到达第 26 行时,规则是:

switch(1) 
case
case
default

尽管它完全遵循switchRegex的模式,但在第28行之后没有任何变化,为什么?

最佳答案

很抱歉没有对您的问题给出直接答案,但我似乎有点不清楚您想要实现的目标。您在进行一些替换后评估规则,但您的开关不是合法的 groovy(或 java)。 switch 后面需要跟大括号。此外,我会尝试利用 groovy 的 DSL 功能而不是制作解析器。如果解析器确实是您所需要的(缺少有关动机和上下文的信息),那么我建议使用像 jparsec 这样的组合器解析器:

https://github.com/jparsec/jparsec

用 jparsec 描述语法非常容易,而且非常易于维护。无论如何,使用正则表达式来解决这个问题看起来就像是一个钉子,因为我们只有一把锤子。

关于java - 正则表达式无法匹配 switch case 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com