如何让正则表达式停止重复匹配?提取指定子串遇难题求助
解决正则多次匹配问题,精准提取目标子串
你的原正则(\S+?\/\S+?)(\s|$)会匹配所有符合「非空格字符+斜杠+非空格字符」且后面跟空格或结尾的片段,所以会抓到aws-sdk-java/1.9.4、Linux/3.10.0-862.mt20190308.130.el7.x86_64等多个结果。给你两个针对性的解决方案:
方案一:匹配字符串开头的目标(适合目标固定在开头的场景)
使用正则:^(\S+\/\S+)
解释:^锚定字符串开头,只从开头开始匹配,\S+\/\S+精准匹配开头的「名称/版本」结构,只会捕获到aws-sdk-java/1.9.4。方案二:精准匹配目标前缀(适合目标位置不固定,但明确是aws-sdk-java开头的场景)
使用正则:(aws-sdk-java\/\S+)
解释:直接指定前缀aws-sdk-java\/,后面跟着任意非空格字符,只会匹配到你要的目标子串,完全不会触发其他匹配。
测试用原字符串验证:
aws-sdk-java/1.9.4 Linux/3.10.0-862.mt20190308.130.el7.x86_64 Java_HotSpot(TM)_64-Bit_Server_VM/25.45-b02/1.8.0_45
用方案一或方案二的正则,都只会得到唯一的匹配结果aws-sdk-java/1.9.4。
内容的提问来源于stack exchange,提问作者x f
相关产品推荐
相关产品推荐

