验证Regex Matcher.find()没有找到准确的键和值

时间:2018-03-15 12:34:15

标签: java regex java-ee pattern-matching regex-group

我编写了一个用Regex验证输入字符串的方法 我为每个输入字符串构建正则表达式 如果发现任何匹配,我正在提取密钥和值

public Matcher matchRegExPattrenWithInputString(String inputString) {
        LOGGER.info("Mathcing the Input String " +inputString);
        Matcher matcher = null;
        for (Pattern pattern : commandRegExCacher.getRegExPattrenCache()) {
            matcher = pattern.matcher(inputString);
            System.out.println(inputString);
            System.out.println("Matching String"+matcher);
            LOGGER.info("Mathcing pattern" +matcher);
            if (matcher != null && matcher.find()) {
                LOGGER.debug("Input String matched ");
                break;
            } else {
                matcher = null;
            }
        }

commandRegExCacher.getRegExPattrenCache()是我为所有必需命令构建模式的地图

pattern= (?i)(^\s?)(Watch\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$ 
 pattern= (?i)(^\s?)(Watch Channel\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$ 
 pattern= (?i)(^\s?)(Tune\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$ 
 pattern= (?i)(^\s?)(Tune To\b\s?)([a-zA-Z0-9\/\\^$*+?.()|\[\]{}'"\s]+)$ 
 pattern=(?i)(^\s?)(goto\b\s?)([a-zA-Z0-9\u0590-\u05fe-\/\\^$*+?.()|\[{}'"\s]+)$
 pattern=(?i)(^\s?)(pi\b\s?)([a-zA-Z0-9\u0590-\u05fe-\/\\^$*+?.()|\[\{}'"\s]+)$ 

因此,在所需命令上创建了很多模式。 当用户输入字符串时,我正在遍历模式图并检查是否存在,当搜索观看频道时,如果找到观看模式,则条件为真,它返回唯一的监视模式。

pattern =(?i)(^ \ s?)(Watch \ b \ s?)([a-zA-Z0-9 / \ ^ $ * + ?.()| [] {}&#39 ;" \ S] +)$

所以正在发生的事情是将手表作为关键并且通道开始运动作为价值

所以任何指针都要处理这个问题。

1 个答案:

答案 0 :(得分:0)

Tune To,Watch Channel命令无法正常工作,因为当首先迭代Tune Pattern时,它与模式列表匹配,因此它首先使用Tune模式验证并返回相同的内容,所以我已通过Take LinkedHsMap和我插入了更长的键。 这样,具有最大长度的String首先迭代。