W e необходимо разобрать правило, которое может включать в себя инструкцию для случая переключения.Regex не может соответствовать шаблону корпуса коммутатора
Как мы рассмотрели использовать 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, почему?
Не пытайтесь сделать общий разбор с регулярным выражением, используйте анализатор. –
thanx для вашего наконечника – moha