我正面临着有关正则表达式模式创建的问题,以便获得所有必需的令牌。将应用正则表达式的我的字符串值具有以下形状:
值:
"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'
答案 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);
}
当然,如果其中任何字段包含字符串and
或or
,则可能会失败...
或者您可以使用前瞻来匹配下一个(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*\'))
带输出:
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
,然后删除结尾and
,or
和空格?