正则表达式模式否定一个字符

时间:2016-11-30 06:57:20

标签: java regex

我的声明如下

SearchResponse scrollResp = client.prepareSearch()
        .setIndices(index)
        .setTypes(type)
        .setSearchType(SearchType.QUERY_AND_FETCH)
        .setFetchSource(new String[]{"my_name"}, null) <--- your specific field
        .setQuery(QueryBuilders.matchAllQuery())
        .setSize(10).execute().actionGet();

我正在尝试创建一个正则表达式,以便在使用insert关键字时从文件中的一组行匹配此行。但由于开头使用'#',我不想考虑这一行。如何实现这一目标。我尝试了下面的正则表达式,但仍然考虑这条线,有人可以建议如何实现这一点吗?

#sv_q = " INSERT INTO alertuser.REALTIME

1 个答案:

答案 0 :(得分:1)

如果您想使用.find(),则需要在^\A开头锚定模式。此外,您最好使用字词边界仅匹配整个单词insertinto,并使用\s+代替\s*来强制执行至少1次出现的空格insertinto

"^(?!#).*\\binsert\\s+into\\b"

您可以将解决方案缩短为

if (s.matches("(?i)(?!#).*\\binsert\\s+into\\b.*")) { doing some checks} 

matches()方法需要完整的字符串匹配,因此,您需要在最后添加.*。此外,Pattern.CASE_INSENSITIVE选项可以在嵌入标志选项(?i)的帮助下内联使用。如果您的输入可以包含换行符,请使用(?si)代替(?i)