package lab3; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtils { private HashMap hashMap = new HashMap(); final String END = "(\\s|$)"; final String STRING_REGEX = "(^\\'(('')|[^']*)\\')"; final String NUMBER_REGEX = "(^\\-{0,1}\\d*\\.{0,1}\\d+)"; final String IDENTIFIER_REGEX = "(^[\\p{L}]{1}[\\.\\p{L}0-9]*)"; final String PATTERN = STRING_REGEX + "|" + NUMBER_REGEX + "|" + IDENTIFIER_REGEX + END ; public void getTypeOfString(String stringForSearchIn, int lineNumber, int length) { hashMap.put(1, "STRING"); hashMap.put(4, "NUMBER"); hashMap.put(5, "IDENTIFIER"); Pattern pattern = Pattern.compile(PATTERN, Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher; while (stringForSearchIn.length() != 0) { matcher = pattern.matcher(stringForSearchIn); if (matcher.find()) { int i = 0; if (matcher.group(2) != null) { i = 1; } else if (matcher.group(4) != null) { i = 4; } else if (matcher.group(5) != null) { i = 5; } System.out.println(hashMap.get(i) + "(" + lineNumber + ", " + (length - stringForSearchIn.length() + 1) + "): " + matcher.group(0) ); stringForSearchIn = stringForSearchIn.substring(matcher.group(i).length()); } else if (stringForSearchIn.charAt(0) == ' ' || stringForSearchIn.charAt(0) == '\t') { stringForSearchIn = stringForSearchIn.substring(1); } else { System.out.println("syntax error (" + lineNumber + ", " + (length - stringForSearchIn.length() + 1) + ")" ); while (stringForSearchIn.length() != 0 && stringForSearchIn.charAt(0) != ' ' && stringForSearchIn.charAt(0) != '\t') { stringForSearchIn = stringForSearchIn.substring(1); } } } } }