使用模式/匹配器,我试图在Java中找到一个正则表达式,以在文本中搜索以_DBF或_REP或_TABLE或_TBL结尾的表名,并返回整个表名。
这些表名可能在表名之间包含一个或多个下划线_。
例如,我想检索表名称,例如:
abc_def_DBF
fff_aaa_aaa_dbf
AAA_REP
123_frfg_244_gegw_TABLE
等等
有人可以为此提出正则表达式吗?
还是更容易逐行阅读文本并使用String的方法endsWith()代替?
提前谢谢了,
GK
最佳答案
正则表达式模式
您可以使用一个简单的正则表达式,如下所示:
\b(\w+(?:_DBF|_REP|_TABLE|_TBL))\b
Working demo
Java代码
对于Java,您可以使用以下代码:
String text = "HERE THE TEXT YOU WANT TO PARSE";
String patternStr = "\\b(\\w+(?:_DBF|_REP|_TABLE|_TBL))\\b";
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println("found: " + matcher.group(1));
}
这是比赛信息:
MATCH 1
1. [0-11] `abc_def_DBF`
MATCH 2
1. [28-43] `fff_aaa_aaa_dbf`
MATCH 3
1. [45-52] `AAA_REP`
MATCH 4
1. [54-77] `123_frfg_244_gegw_TABLE`
正则表达式模式说明
如果您不熟悉正则表达式以了解此模式的工作原理,则此正则表达式的想法是:
\b --> use word boundaries to avoid having anything like $%&abc
(\w+ --> table name can contain alphanumeric and underscore characters (\w is a shortcut for [A-Za-z_])
(?:_DBF|_REP|_TABLE|_TBL)) --> must finish with any of these combinations
\b --> word boundaries again