如果我走错了方向,请让我知道是否有更好的方法来处理这个问题。
我有一个Java程序,它将有多个模式,我想将其与输入进行比较。如果其中一个模式匹配,则我希望将该值保存在一个字符串中。我可以用单个模式使其工作,但我想能够检查多个模式。
现在我有以下代码来检查输入是否与一个模式匹配:
Pattern pattern = Pattern.compile("TST\\w{1,}");
Matcher match = pattern.matcher(input);
String ID = match.find()?match.group():null;
因此,如果输入是TST1234或abcTST1234,则ID =“TST1234”
我想要多个模式,例如:
Pattern pattern = Pattern.compile("TST\\w{1,}");
Pattern pattern = Pattern.compile("TWT\\w{1,}");
...
然后将其收集起来,再逐一检查与输入进行比对:
List<Pattern> rxs = new ArrayList<Pattern>();
rxs.add(pattern);
rxs.add(pattern2);
String ID = null;
for (Pattern rx : rxs) {
if (rx.matcher(requestEnt).matches()){
ID = //???
}
}
我不确定如何将ID设置为我想要的。我已经尝试过:
ID = rx.matcher(requestEnt).group();
并且
ID = rx.matcher(requestEnt).find()?rx.matcher(requestEnt).group():null;
我不是很确定如何让它工作,也不知道接下来该怎么做。欢迎任何帮助或建议。谢谢。
编辑:是的,模式会随时间变化。因此,模式列表将增长。
我只需要得到匹配的字符串...如果输入是abcTWT123,它将首先与"TST\w{1,}"进行匹配,然后移动到"TWT\w{1,}",由于它与ID字符串匹配,所以ID字符串将设置为"TWT123"。
Pattern.compile("T[SW]T\\w{1,}");
=> 匹配T
然后是S
或W
然后是T
,或者Pattern.compile("(patternA|otherB)\\w{1,}");
... 一个好的答案取决于有多少个模式,它们有多不同,有多可配置或动态...编写代码时是否已知所有可能的模式?它们会随时间而改变吗? - Stephen P