求助:正则表达式如何正确提取<*n(n为数字)等指定模式
解决正则匹配问题的方案
直接上能满足你所有要求的正则:
(<\*\d+)|(<(?!\*\d))
规则拆解
- 第一部分
(<\*\d+):专门匹配<*后面跟一串数字的完整组合,比如<*15、<*8这类,会把<*加所有数字一次性捕获出来。 - 第二部分
(<(?!\*\d)):只捕获单独的<,通过负向预查(?!\*\d)做过滤:- 当
<后面不是*(比如<6),直接捕获< - 当
<后面是*但无数字(比如<*abc),也仅捕获<
- 当
测试验证
用这个正则匹配你提供的字符串 "abcd<*15<<defgj<*3fsdfsdf",会得到精准结果:
<*15<<<*3
你之前的正则失效原因
你写的\<\*?[0-9+]?和\<\*?[\d+]?存在两个关键问题:
[0-9+]和[\d+]是字符类,里面的+是普通字符,不是「匹配多次」的量词,只能匹配单个数字或+,无法捕获多位数。- 末尾的
?是可选匹配,最多仅匹配1个字符,所以碰到<*15时,只能匹配到<*1,无法完整捕获15。
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

