哪个正则表达式可以接受以下任何行作为输入
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,即没有可选的尾随部分。
谢谢。
发布于 2009-03-11 16:51:19
这应该会捕获服务器名称。
/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
下面的代码捕获url:
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
发布于 2009-03-11 16:51:12
这将完全符合您刚才的要求:
$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');
发布于 2009-03-11 17:15:41
您可以匹配以下内容:
(.*?)(\/streamid\=65335)?(\/)?( RTSP\/1.0)?(\n)?$
并且只读第一组。
根据您使用的语言,使用字符串处理可能会更清楚。例如在Python中:
for suffix in ('\n', ' RTSP/1.0', '/streamid=65335', '/'):
if url.endswith(suffix):
url= url[:-len(suffix)]
https://stackoverflow.com/questions/635383
复制相似问题