Java Regex:如果单词以特定字符串结尾,如何返回整个单词

时间:2014-10-15 14:37:49

标签: java regex

使用Pattern / Matcher,我试图在Java中找到一个正则表达式,用于在文本中搜索 _DBF或_REP或_TABLE或_TBL结尾的表名并返回整个表名。

这些表名可能在表名之间包含一个或多个下划线。

例如,我想要检索表名,如:

abc_def_DBF

fff_aaa_aaa_dbf

AAA_REP

123_frfg_244_gegw_TABLE

有人可以为此提出一个正则表达式吗?

或者更容易逐行阅读文本并使用String的方法endsWith()代替?

非常感谢, GK

4 个答案:

答案 0 :(得分:4)

正则表达式

您可以使用这样的简单正则表达式:

\b(\w+(?:_DBF|_REP|_TABLE|_TBL))\b

<强> Working demo

enter image description here

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

答案 1 :(得分:0)

一个简单的替代方案可能是此正则表达式".*(_DBF|_REP|_TABLE|_TBL)$",这意味着任何以_DBF_REP_TABLE_TBL结尾的字符串。

PS:指定正则表达式为无壳

答案 2 :(得分:0)

这个正则表达式应该与整个单词匹配:

\w+_([Dd][Bb][Ff]|REP|TABLE)

这是: word matching


此正则表达式应该与关键字匹配:

_(DBF)|(REP)|(TABLE)

匹配_,然后是DBFREPTABLE

如果您希望匹配_dbf(小写),我不清楚。如果是这样,只需将DBF更改为[Dd][Bb][Ff]

_([Dd][Bb][Ff])|(REP)|(TABLE)

如果您希望匹配更多关键字,只需添加另一个|(abc)组。

当然,只有当您知道这些“关键字”只出现一次且仅出现在字符串末尾时,此方法才有效。例如,如果您有123_frfg_TABLE_244_gegw_TABLE,则两者都匹配。

以下是正则表达式的截图:

Regexp matching

答案 3 :(得分:0)

试试这个:

System.out.println("blah".matches(".*[_DBF|_REP|_TABLE|_TBL]$"));
System.out.println("blah_TBL".matches(".*[_DBF|_REP|_TABLE|_TBL]$"));
System.out.println("blah_TBL1".matches(".*[_DBF|_REP|_TABLE|_TBL]$"));