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

标签 java regex

我的声明如下

#sv_q = " INSERT INTO alertuser.REALTIME

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

static Pattern tracePattern = Pattern.compile("(?!\\#).*insert\\s*into",Pattern.CASE_INSENSITIVE);
Matcher localMatcher = tracePattern.matcher(line); 
if (localMatcher.find()) { 
  //  doing some checks
}

最佳答案

如果您想使用.find() ,您需要在开头锚定模式 ^\A 。此外,您最好使用单词边界来仅匹配整个单词 insertinto ,并使用\s+而不是\s*强制 insert 之间至少出现 1 次空格和into :

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

您可以将解决方案缩短为

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

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

关于java - 正则表达式模式来否定一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40882115/

相关文章:

java - 尽管明确将其设置为空,但对 session 属性的引用未变为空

c# - 删除 XML 中的流氓符号的最佳方法是什么?

Java 默认访问级别(包私有(private)访问)。为什么用它?

java - Tomcat 数据源 - 连接池

php - 在 PHP 中使用正则表达式进行 iOS 检测

regex - 正则表达式以查看ip是否以156.21.x.x开头

javascript - 电子邮件验证 Javascript 正则表达式

python - 找到一个没有跟随另一个词的词

java - 是否有一个库可以识别 java 类中的 Swing GUI 组件?

java - 在 unix 终端中运行 java 程序