提取字符串中两个相同边界词之间的内容
发布时间 - 2026-01-10 00:00:00 点击率:次本文介绍如何使用正则表达式精准提取两个相同单词(作为起止标记)之间的子字符串,避免误匹配子串(如“is”不匹配“this”),并提供可直接运行的 java 8+ 示例代码与关键注意事项。
在实际字符串处理中,常需提取位于两个相同完整单词之间的内容(例如 "this is an example to extract se
ntence between is" 中,以单词 "is" 为前后边界,提取中间的 "an example to extract sentence between")。注意:这里的 "is" 必须是独立单词(word boundary),不能是其他单词的子串(如 "this" 或 "ising" 应被忽略)。
直接使用 indexOf() 手动查找起止位置容易出错——正如提问中所示,它会将第一个 "is"(在 "this" 中)误判为起点,或无法保证两次匹配均为完整单词。更可靠的方式是采用基于单词边界的正则表达式,利用 (?
以下是推荐的 Java 实现(兼容 Java 8+,无需额外依赖):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SubstringBetweenSameWord {
public static void main(String[] args) {
String originalString = "this is an example to extract sentence between is";
String delimiter = "is";
// 构建动态正则:要求前后均为完整单词 \b{delimiter}\b
String regex = "(?<=\\b" + Pattern.quote(delimiter) + "\\b)(.*?)(?=\\b" + Pattern.quote(delimiter) + "\\b)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(originalString);
if (matcher.find()) {
System.out.println(matcher.group(1).trim()); // 输出:an example to extract sentence between
} else {
System.out.println("未找到有效的成对边界词");
}
}
}✅ 关键要点说明:
- 使用 Pattern.quote(delimiter) 防止分隔符含正则元字符(如 "a.b")导致编译失败;
- \\b 表示单词边界,确保 "is" 不会从 "this" 或 "island" 中误匹配;
- .*? 采用非贪婪匹配,避免跨多组边界时过度捕获;
- trim() 清除可能的首尾空格,提升结果可用性;
- 若字符串中存在多个 "is",该正则默认匹配第一对有效闭合区间(即首个起始 "is" 与之后最近的结束 "is");如需全部匹配,可循环调用 matcher.find()。
⚠️ 注意事项:
- Apache Commons Lang 的 StringUtils.substringBetween() 仅支持不同的 start/end 字符串(如 substringBetween(str, "start", "end")),不适用于本场景;
- 纯 indexOf() 方案需手动校验单词边界(如结合空格/标点判断),逻辑复杂且易出错,不建议用于生产环境;
- 若分隔符可能出现在句首或句尾(如 "is hello world is"),当前逻辑仍适用;但若仅有单个 "is",则 matcher.find() 返回 false,应做好空值处理。
综上,正则表达式是解决“相同单词边界间提取”问题最简洁、健壮且符合语义的方式,兼顾准确性与可维护性。
# word
# java
# 正则表达式
# apache
# ai
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 require机制详解及实例代码
如何快速登录WAP自助建站平台?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
在线教育网站制作平台,山西立德教育官网?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel怎么使用Intervention Image库处理图片上传和缩放
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
WEB开发之注册页面验证码倒计时代码的实现
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
JavaScript如何操作视频_媒体API怎么控制播放
如何安全更换建站之星模板并保留数据?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
如何在Windows 2008云服务器安全搭建网站?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
中山网站推广排名,中山信息港登录入口?
PHP 500报错的快速解决方法
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Mybatis 中的insertOrUpdate操作
如何用腾讯建站主机快速创建免费网站?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
奇安信“盘古石”团队突破 iOS 26.1 提权
java ZXing生成二维码及条码实例分享
Laravel如何保护应用免受CSRF攻击?(原理和示例)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
微信小程序 canvas开发实例及注意事项
如何在服务器上三步完成建站并提升流量?
Android实现代码画虚线边框背景效果
如何快速选择适合个人网站的云服务器配置?
Windows Hello人脸识别突然无法使用
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
网站优化排名时,需要考虑哪些问题呢?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
jquery插件bootstrapValidator表单验证详解
nodejs redis 发布订阅机制封装实现方法及实例代码
常州企业网站制作公司,全国继续教育网怎么登录?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】

