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

Java正则表达式中positive lookbehind内capturing group的异常行为及解决方案咨询

Java正则表达式中positive lookbehind内capturing group的异常行为及解决方案咨询

我遇到了一个只在Java正则表达式里出现的问题,像PCRE这类其他正则引擎不会有这种情况。

我使用的正则表达式是:(?:(?<=([A-Za-z\d]))|\b)(MyString),其中正向后视断言(positive lookbehind)里包含了一个捕获组([A-Za-z\d])。

我尝试匹配字符串string.MyString(具体是通过Pattern.matcher(regex)调用replaceAll方法),结果发现两种引擎的表现完全不同:

  • 在PCRE中,只会匹配到MyString,它会作为匹配结果的第二组;
  • 但在Java中,却会把string里的g匹配为第一组,MyString作为第二组。

我有两个疑问:

  1. 为什么Java会有这样的行为?在我看来,这个正则的逻辑应该是:只有当[A-Za-z\d]匹配的字符直接出现在MyString前面时才会被捕获,但这里g后面是.,并不是MyString,这完全不符合预期啊。
  2. 我该怎么修改才能避免捕获这个g?同时我还想保留这个捕获组,因为当遇到像stringMyString这样的字符串时,我确实需要把g作为第一组捕获到。

备注:内容来源于stack exchange,提问作者wouldnotliketo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:49:50