如何用正则表达式提取字符串中$a、$b等标记后的子串?
解决正则提取$标记后子串的问题
正确正则表达式
使用非贪婪匹配结合正向预查,精准捕获每个$标记后的内容:
\$([a-z])(.*?)(?=\$[a-z]|$)
正则拆解
\$:匹配字面量$(需转义,因为$在正则中是行尾锚点)([a-z]):捕获$后的单个字母标记(如a、b、c)(.*?):非贪婪模式匹配任意字符,避免过度匹配后续的$标记(?=\$[a-z]|$):正向预查,匹配到下一个$+字母或者字符串结尾的位置,作为终止边界
匹配结果
对目标字符串 "$a477tr.: $bBìa mềm ; $c13x18.8cm" 应用该正则,会得到三组捕获结果:
- 标记
a对应内容:"477tr.: " - 标记
b对应内容:"Bìa mềm ; " - 标记
c对应内容:"13x18.8cm"
为什么之前的正则失效?
你之前的正则大概率使用了贪婪匹配的.*,它会尽可能匹配最长的字符序列,导致从$a开始一直匹配到字符串末尾,把$b和$c的内容也包含进去。换成非贪婪的.*?并配合正向预查,就能限制匹配范围到当前标记和下一个标记之间。
内容的提问来源于stack exchange,提问作者Tommy Hoang
相关产品推荐
相关产品推荐

