正则表达式模式的困难

时间:2015-08-04 13:59:47

标签: java regex

我正面临着有关正则表达式模式创建的问题,以便获得所有必需的令牌。将应用正则表达式的我的字符串值具有以下形状:

值:

"DB_TABLE_LUX.field_8='bbb \' `\" dsd' and DB_TABLE_FRA.field_1 = ' bbb dsd' and DB_TABLE_FRA.fieldName = ' bbb dsd ' or DB_TABLE_GER.field_3= 125 "

必填结果:我想要一个包含这些值的字符串列表

List {
"DB_TABLE_LUX.field_8='bbb \\' `\" dsd'",
"DB_TABLE__FRA.field_1 = ' bbb dsd'",
"DB_TABLE_FRA.fieldName = ' bbb dsd '",
"DB_TABLE_GER.field_3=  125"
}

我使用的正则表达式:

"DB_TABLE_[a-zA-Z]{3}\\.\\w+\\s*\\=\\s*([0-9]+|(\'(\\s*\\w+\\s*)+\'))"

上面的正则表达式没有提取整个数据,第一个值丢失,下面是结果。

List{
"DB_TABLE_FRA.field_1 = ' bbb dsd'",
"DB_TABLE_FRA.fieldName = ' bbb dsd '",
"DB_TABLE_GER.field_3=  125"
}

我想考虑下一个值。

DB_TABLE_LUX.field_8='bbb \\' `\" dsd'

4 个答案:

答案 0 :(得分:0)

我发现任何/所有正则表达式帮助的最佳资源,支持15种语言。只需键入要匹配的字符串,然后点击“显示匹配项”,然后选择要匹配的标记:RegEx Help

答案 1 :(得分:0)

正如评论中所建议的那样:不要使用非常复杂的正则表达式来提取你想要的部分,只需使用一个非常简单的正则表达式来分割你想要的部分。

String text = "DB_TABLE_LUX.field_8='bbb \' `\" dsd' and DB_TABLE_FRA.field_1 = ' bbb dsd' and DB_TABLE_FRA.fieldName = ' bbb dsd ' or DB_TABLE_GER.field_3= 125 ";
for (String s : text.split(" and | or ")) {
    System.out.println(s);
}

当然,如果其中任何字段包含字符串andor,则可能会失败...

或者您可以使用前瞻来匹配下一个(and|or)DB_TABLE$的所有内容:

Pattern p = Pattern.compile("DB_TABLE.*?(?=\\s+(?:and|or)\\s+DB_TABLE|$)");
Matcher m = p.matcher(text);
while (m.find()) {
    System.out.println(m.group());
}

结果,对于这两种情况:

DB_TABLE_LUX.field_8='bbb ' `" dsd'
DB_TABLE_FRA.field_1 = ' bbb dsd'
DB_TABLE_FRA.fieldName = ' bbb dsd '
DB_TABLE_GER.field_3= 125 

答案 2 :(得分:0)

如果最后一部分是数字或字符,则为“bbb'和' dsd'您可以尝试使用的字符串:

DB_TABLE_(\\w){3}\\.\\w+\\s*=\\s*(\\d+|(\'\\s*bbb.+?dsd\\s*\'))

DEMO

带输出:

DB_TABLE_LUX.field_8='bbb ' `" dsd'
DB_TABLE_FRA.field_1 = ' bbb dsd'
DB_TABLE_FRA.fieldName = ' bbb dsd '
DB_TABLE_GER.field_3=  125

答案 3 :(得分:0)

将完整字符串拆分为DB_TABLE,然后删除结尾andor和空格?