正则表达式验证rtsp链接有效性

本文介绍了一种使用正则表达式验证RTSP链接有效性的方法,包括无用户名密码、带用户名密码的不同情况,并通过测试用例验证了其准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<regex>

// 不带用户名密码的有效rtsp链接
bool IsValidRtspUrlWithoutUser(const char *rtsp)
{
    std::regex regExpress1("^rtsp://\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d{1,5}/[^\\s]+");    // 带有端口
    std::regex regExpress2("^rtsp://\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/[^\\s]+");             // 不带端口
    return std::regex_search(rtsp, regExpress1) || std::regex_search(rtsp, regExpress2);
}

// 带有用户名密码的有效rtsp链接
bool IsValidRtspUrlWithUser(const char *rtsp)
{
    std::regex regExpress1("^rtsp://\\w{1,20}:\\w{1,20}@\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d{1,5}/[^\\s]+");    // 带有端口
    std::regex regExpress2("^rtsp://\\w{1,20}:\\w{1,20}@\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/[^\\s]+");             // 不带端口
    return std::regex_search(rtsp, regExpress1) || std::regex_search(rtsp, regExpress2);
}

// 有效的rtsp链接
bool IsValidRtspUrl(const char *rtsp)
{
    return IsValidRtspUrlWithUser(rtsp) || IsValidRtspUrlWithoutUser(rtsp);
}

#define TEST_FUNC(fun, param, expect)    { if(expect != ##fun(param)) bPassed &= false; }

int main(int argc, char** argv)
{
    bool bPassed = true;
    // 不带用户名密码、端口
    char *pUrl = "rtsp://192.168.0.45/Streaming/channels/101";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, true);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, true);
    // 带用户名密码不带端口
    pUrl = "rtsp://admin:admin12345@192.168.0.45/Streaming/channels/101";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, true);
    TEST_FUNC(IsValidRtspUrl, pUrl, true);
    // 带用户名密码和端口
    pUrl = "rtsp://admin:admin12345@192.168.0.45:554/Streaming/channels/101";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, true);
    TEST_FUNC(IsValidRtspUrl, pUrl, true);
    // 带端口不带用户名密码
    pUrl = "rtsp://192.168.0.45:554/Streaming/channels/101";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, true);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, true);
    // 错误url
    pUrl = " rtsp://192.168.0.45:554/Streaming/channels/101";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, false);
    pUrl = "rtsp://192.168.0.45/";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, false);
    pUrl = "rtsp://192.168.0.45";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, false);
    pUrl = "192.168.0.45";
    TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
    TEST_FUNC(IsValidRtspUrl, pUrl, false);
    if (bPassed)
    {
        puts("test passed");
    }
    else
    {
        puts("test failed");
    }
    getchar();
    return 0;
}

  • 以上代码只是匹配了链接格式,并没有对IP地址进行有效匹配,如需要对IP地址部分进行更精确的匹配,需要将正则表达式中匹配IP的部分\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}替换为([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])
要根据正则表达式匹配IP地址,可以使用以下正则表达式: "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}" 这个正则表达式可以匹配IP地址的各个部分,并确保每个部分的取值范围在0到255之间。 在Java中,可以使用java.util.regex包中的Pattern和Matcher类来进行正则表达式匹配。可以使用以下示例代码来实现IP地址的匹配: import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main(String args[]) { String str = ""; // 需要匹配的字符串 String pattern = "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}"; // IP地址正则表达式 Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); System.out.println(m.matches()); // 输出匹配结果,true表示匹配成功,false表示匹配失败 } } 你可以使用这段代码将要匹配的字符串赋值给str变量,然后通过调用m.matches()方法来判断是否匹配成功。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [正则表达式-匹配ip及rtsp](https://blog.csdn.net/wangchaox123/article/details/102753170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值