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

PCRE正则如何匹配括号内竖线分隔的所有单词并分到独立捕获组?

有时我认为图片往往比文字更直观清晰。
enter image description here
如您所见,我当前遇到的问题是现有正则只能两两匹配单词,请问要如何才能匹配全部目标单词?
我目前使用的PCRE正则表达式为:([^\|\(\)\|]+)\|([^\|\(\)\|]+)
我的最终需求是:将括号内的所有单词分别匹配到独立的捕获组中。

解决方案

你可以使用PCRE的\G锚点实现括号内不定数量单词的连续独立捕获,符合要求的正则如下:

(?:\G(?!^)\||\()([^|()]+)(?=[^()]*\))

逻辑说明

  • 前缀非捕获组(?:\G(?!^)\||\()负责定位匹配起点:要么匹配上一次成功匹配结束位置后的分隔符|,要么匹配左括号(,确保所有匹配都从括号起始位置开始连续向后匹配
  • 捕获组([^|()]+)匹配单个目标单词,自动排除分隔符和括号本身
  • 末尾正向预查(?=[^()]*\))限制匹配范围,确保捕获的内容一定在当前对括号内部,不会误匹配括号外的字符

使用效果

以PHP的preg_match_all为例,执行匹配后$matches[1]数组会按顺序返回括号内所有独立单词,每个单词都是单独的捕获结果,不需要提前预知括号内的单词数量。
你之前的正则固定设置了两个捕获组,所以只能每次匹配两个单词,自然无法适配数量不定的多单词场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:02