如何用正则获取‘search from here’之后每个指定单词的匹配项?
解决方案
方法1:全局匹配+正向断言
调整正则表达式,结合全局匹配(g修饰符)逐个捕获目标词,同时确保匹配内容位于search from here之后:
(?i)(?<=search from here.*?)\b(apple|banana|orange)\b
说明
(?i):启用大小写不敏感匹配(?<=search from here.*?):正向后顾断言,保证当前匹配的单词前存在search from here及任意长度的非贪婪字符\b(apple|banana|orange)\b:精准匹配目标完整单词- 开启全局匹配后,引擎会遍历字符串,捕获所有符合条件的目标词,包括你需要的两个
apple和banana。
方法2:分两步提取匹配
如果正则引擎对可变长度后顾断言支持有限,可拆分为两步操作:
- 先提取
search from here之后的全部文本:(?i)(?<=search from here).*$ - 对提取到的子串执行全局匹配,查找所有目标词:
(?i)\b(apple|banana|orange)\b
原正则的问题分析
你原有的正则(?i)(?<=search from here\s)(\bapple|banana|orange\b)(\s+(\bapple|banana|orange\b))*试图一次性匹配所有后续目标词,但重复捕获组(\s+(\bapple|banana|orange\b))*仅会保留最后一次重复匹配的内容,因此无法获取所有中间目标词,只能拿到第一个和最后一个匹配项。
内容的提问来源于stack exchange,提问作者bigb055
相关产品推荐
相关产品推荐

