正则表达式匹配@与空格间内容异常,求修正方案
解决正则匹配最后一个@与空格间内容的问题
你的原正则@+(.+? )失效的原因是:@+会优先匹配字符串开头的一个或多个@,随后的非贪婪.+?会从这个位置开始,一直匹配到第一个空格为止,自然会把ss@aa整个包含进去——因为从第一个@后面到空格的内容就是这段。
要精准匹配最后一个@到空格间的内容,给你两个可行方案:
方案1:用贪婪匹配定位最后一个@
正则表达式:.*@([^@]+?)(?=\s)
.*会贪婪匹配到字符串中**最后一个@**的位置,直接跳过前面所有的@和内容([^@]+?)匹配@后面到空格前的内容([^@]确保不会包含其他@,非贪婪模式保证只到第一个空格)(?=\s)是正向预查,确保捕获内容的后面紧跟空格,避免误匹配其他场景
方案2:用反向预查锁定目标@
正则表达式:(?<=@)([^@\s]+)(?=\s)
(?<=@)反向预查,确保捕获内容的前面是@[^@\s]+匹配既不是@也不是空格的连续字符——这会自动跳过前面@后包含@的内容(比如ss@里有@,不符合规则),只匹配最后一个@后的aa(?=\s)同样保证捕获内容后是空格
测试输入@@ss@aa s,两个正则的捕获组结果都是aa,符合你的需求。
内容的提问来源于stack exchange,提问作者NoKey
相关产品推荐
相关产品推荐

