咨询匹配以'--> xxx'(xxx为数字)开头字符串的正则表达式
搞定开头匹配的正则写法!
嘿,你当前的代码问题在于用了contains()——它是找字符串任何位置的匹配,但你要的是从开头就匹配这个模式对吧?那得调整正则和匹配方式,我给你详细说:
1. 正确的正则表达式
要强制从字符串开头匹配,必须加上^(行首锚点),完整的正则字符串是:
"^-->\\s+\\d+"
拆解一下每个部分:
^:就像个“定位器”,告诉正则必须从字符串的第一个字符开始匹配,不会把中间出现的--> 数字算进去-->:直接匹配字面量的-->,这些都是普通字符,不用额外转义\\s+:匹配一个或多个空白字符(空格、制表符都行,对应你示例里的空格)\\d+:匹配一个或多个数字,完美对应200、201这类数字
如果你的场景里,-->和数字之间只能有一个空格(不能多也不能是其他空白),可以把\\s+改成单个空格:
"^--> \\d+"
2. 正确的匹配方式
别用contains()或者matches()(matches()会要求整个字符串完全等于这个模式,比如后面不能加其他内容),根据你用的语言选对应的写法:
Kotlin 简洁写法
从Kotlin 1.3开始,String.startsWith()支持直接传正则,一步到位:
val isStartsWithPattern = message.startsWith(Regex("^-->\\s+\\d+"))
或者如果你需要兼容更早版本,可以用这个方式:
val pattern = Regex("^-->\\s+\\d+") val isStartsWithPattern = pattern.find(message)?.range?.start == 0
Java 写法
用lookingAt()方法,它专门用来检查字符串是否从开头匹配正则:
Pattern pattern = Pattern.compile("^-->\\s+\\d+"); Matcher matcher = pattern.matcher(message); boolean isStartsWithPattern = matcher.lookingAt();
3. 为啥之前的写法不对?
你之前的message.contains(Regex("-->\\s+(\\d+)"))有两个问题:
- 没加
^锚点:比如字符串"随便写点 --> 200"也会被判定为符合,但这明显不是开头匹配 contains()是找任意位置的匹配子串,完全不符合你“开头就有这个模式”的需求
举几个测试例子:
✅ 符合的:"--> 200"、"--> 403 后面加内容也没问题"、"--> 123"(用制表符分隔数字)
❌ 不符合的:"前面有内容 --> 200"、"-- 200"(少了一个>)、"--> abc"(不是数字)
内容的提问来源于stack exchange,提问作者iadcialim24




