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

求助:编写可匹配多模式子串的正则表达式

搞定这个正则的办法

正确的正则表达式

/<sym>.*?<\/sym>|<sps>.*?<\/sps>|<sbs>.*?<\/sbs>|(?:(?!<sym>|<sps>|<sbs>).)+/gs

正则逻辑拆解

  • <sym>.*?<\/sym>:精准匹配<sym>标签对,.*?是非贪婪匹配,只会抓到最近的</sym>,不会跨标签乱匹配
  • <sps>.*?<\/sps>:和上面逻辑一致,匹配<sps>标签对
  • <sbs>.*?<\/sbs>:同理匹配<sbs>标签对
  • (?:(?!<sym>|<sps>|<sbs>).)+:专门捕获三个标签之外的所有内容,(?!...)是负向前瞻,确保当前位置后不是这三个标签的开头,避免误抓标签内容;(?:...)是不捕获分组,+表示至少匹配一个字符(若需允许空串,把+改成*即可)
  • 修饰符g:全局匹配,一次性返回所有符合条件的子串;s:让.能匹配换行符(文本无换行可省略)

原正则的问题所在

  • [^.]*:该写法限制标签内容不能包含.,完全违背你“任意值可含空格、特殊字符”的需求,必须替换为.*?非贪婪匹配
  • (?([a-zA-Z0-9]+)):这是语法错误的无效结构,属于多余内容,直接删除即可
  • 缺少全局修饰符g:不加g时,正则仅返回第一个匹配项,必然出现匹配不全的情况

测试示例

假设输入文本:abc<sym>test@123</sym>def<sps>hello world!</sps>xyz
匹配后会得到以下结果:

  • abc
  • <sym>test@123</sym>
  • def
  • <sps>hello world!</sps>
  • xyz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:27