正则表达式可以将以下任何一行作为输入
rtsp://server/blabla/bla RTSP/1.0
rtsp://server/blabla/bla/
rtsp://server/blabla/bla
rtsp://server/blabla/bla/streamid=65335 RTSP/1.0
并始终返回:
rtsp://server/blabla/bla
一般情况下,我有一个任意网址,始终以"rtsp://"
开头,可选择以EOL
,"/"
," RTSP/1.0"
或"/streamid=65335 RTSP/1.0"
结尾。
我只需要获取URL,即没有可选的尾随部分。
感谢。
答案 0 :(得分:2)
这应该捕获服务器名称。
/rtsp:\/\/([^\/]+)/
来自新要求(这会删除尾随):
linux ~ $ echo "rtsp://server/blabla/bla RTSP/1.0
rtsp://server/blabla/bla/
rtsp://server/blabla/bla
rtsp://server/blabla/bla/streamid=65335 RTSP/1.0
" | perl -pe 's/( RTSP\/1.0|\/|\/streamid=65335 RTSP\/1\.0)$//g'
rtsp://server/blabla/bla
rtsp://server/blabla/bla
rtsp://server/blabla/bla
rtsp://server/blabla/bla
这个捕获网址:
echo "rtsp://server/blabla/bla RTSP/1.0
rtsp://server/blabla/bla/
rtsp://server/blabla/bla
rtsp://server/blabla/bla/streamid=65335 RTSP/1.0
" | perl -pe 's/(.+?)(?: RTSP\/1.0|\/|\/streamid=65335 RTSP\/1\.0)$/\1/'
rtsp://server/blabla/bla
rtsp://server/blabla/bla
rtsp://server/blabla/bla
rtsp://server/blabla/bla
答案 1 :(得分:1)
这将完全符合您的要求:
$pattern = '/rtsp:\/\/server\/.*/'
$replace = 'server/9C8CE56C490F2C87';
preg_replace($pattern, $replace, 'rtsp://server/blabla/bla RTSP/1.0');
如果你想在空间之前得到所有东西,这将有效:
$pattern = '/([^ ]+).*/'
preg_replace($pattern, '$1', 'rtsp://server/blabla/bla RTSP/1.0');
答案 2 :(得分:1)
你可以匹配:
(.*?)(\/streamid\=65335)?(\/)?( RTSP\/1.0)?(\n)?$
并且只读第一组。
根据您使用的语言,使用字符串处理可能更清楚。例如在Python中:
for suffix in ('\n', ' RTSP/1.0', '/streamid=65335', '/'):
if url.endswith(suffix):
url= url[:-len(suffix)]
答案 3 :(得分:1)
根据您的新标准,我认为您不需要正则表达式。
编辑:删除了Perl解决方案,因为你正在使用C.使用C,执行此操作:
str[20] = 0; // string is now NUL-terminated to 20 characters
if(!strcmp(str, "rtsp://server/blabla/bla"))
{
// do stuff if it matches
}
else
{
// do stuff if it doesn't match
}
或者,如果你想保留原始字符串:
if(!strncmp(str, "rtsp://server/blabla/bla", 20)) // only compare 20 chars
{
// do stuff if it matches
}
else
{
// do stuff if it doesn't match
}
您可能想要执行strncmp()
解决方案。这样,您可以根据查询来改变查询的长度。
答案 4 :(得分:0)
你在寻找这样的东西:
^rtsp://([^/]+)
然后将其替换为“$1/9C8CE56C490F2C87
”?