You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写匹配行尾或匹配串中间无分号字符串的Java正则表达式

正则表达式调整方案

原正则存在的问题

  • 未限制public到methodName()之间的内容不能出现分号,无法过滤中间带分号的无效行
  • 默认模式下$仅匹配整个文本的结尾,无法按行校验行尾是否存在分号

调整后的实现

正则表达式

调整后的正则为:
public\\s+[^;]*?\\bmethodName\\b\\s*\\(\\)[^;]*$
各部分逻辑说明:

  • public:匹配方法的public修饰符前缀
  • \\s+:匹配修饰符后的一个或多个空白字符
  • [^;]*?:非贪婪匹配任意非分号字符,确保目标匹配内容的中间部分不会出现分号
  • \\bmethodName\\b:精准匹配方法名,避免出现方法名部分匹配的误判
  • \\s*\\(\\):匹配方法名后的空白字符和参数括号
  • [^;]*$:匹配括号后到行尾的所有非分号字符,确保行尾没有分号

完整Java代码

需要在编译正则时开启Pattern.MULTILINE模式,让$可以匹配每一行的行尾:

// 开启多行模式,让$匹配每行的行尾
Pattern pattern = Pattern.compile("public\\s+[^;]*?\\bmethodName\\b\\s*\\(\\)[^;]*$", Pattern.MULTILINE);
Matcher methodMatcher = pattern.matcher(classContent); // classContent是读取的Java文件内容
while (methodMatcher.find()) {
    System.out.println("methodname="+methodMatcher.group());
}

场景验证

  • 匹配通过场景:Someword; public void methodName()、public void methodName(),均可正常提取到public void methodName()
  • 匹配拦截场景:Someword; public void; methodName();、public void methodName();,中间或行尾带分号,均不会返回匹配结果

内容的提问来源于stack exchange,提问作者Sanzida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:36:04