regexp来切掉可选的尾部

regexp来切掉可选的尾部,regex,Regex,什么正则表达式可以将下面的任何一行作为输入 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 一般来说,我有一个任意URL,它总是以“rtsp://”开头,并且可以选择以EOL、“/”、“rtsp/1.0”或“/s

什么正则表达式可以将下面的任何一行作为输入

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
一般来说,我有一个任意URL,它总是以
“rtsp://”
开头,并且可以选择以
EOL
“/”
“rtsp/1.0”
“/streamid=65335 rtsp/1.0”
结尾

我只需要获取URL,即不需要可选的尾部


谢谢。

这正是您刚才要求的:

$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');

这正是你刚才要求的:

$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');

你在找这样的东西吗:

^rtsp://([^/]+)

然后将其替换为“
$1/9C8CE56C490F2C87
”?

您是否正在寻找类似以下内容:

^rtsp://([^/]+)

然后将其替换为“
$1/9C8CE56C490F2C87
”?

这应该捕获服务器名称

/rtsp:\/\/([^\/]+)/
从新需求(这将删除尾随):

这一个捕获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

这将捕获服务器名称

/rtsp:\/\/([^\/]+)/
从新需求(这将删除尾随):

这一个捕获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

您可以与以下内容相匹配:

(.*?)(\/streamid\=65335)?(\/)?( RTSP\/1.0)?(\n)?$
并且只读取第一组

根据您使用的语言,使用字符串处理可能更为清晰。例如,在Python中:

for suffix in ('\n', ' RTSP/1.0', '/streamid=65335', '/'):
    if url.endswith(suffix):
        url= url[:-len(suffix)]

您可以与以下内容相匹配:

(.*?)(\/streamid\=65335)?(\/)?( RTSP\/1.0)?(\n)?$
并且只读取第一组

根据您使用的语言,使用字符串处理可能更为清晰。例如,在Python中:

for suffix in ('\n', ' RTSP/1.0', '/streamid=65335', '/'):
    if url.endswith(suffix):
        url= url[:-len(suffix)]

根据你的新标准,我认为你不需要正则表达式

编辑:删除了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()
解决方案。这样,您可以根据不同的查询更改长度。

根据您的新条件,我认为您不需要正则表达式

编辑:删除了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()
解决方案。这样,您就可以根据不同的查询更改长度。

没有一个输入URL包含“9C8CE56C490F2C87”,那么您从哪里得到它呢?我认为你需要更好地解释你的问题。你能澄清一下吗。应该匹配的模式是什么?甚至“*”也可以用来匹配任何一行。请再次查看我在顶部编辑的帖子。2个问题——1)有时尾随/是重要的。你可能需要它吗?2) streamid=65335是上一个示例中url的一部分。您需要吗?我发布了一个perl正则表达式解决方案,它可以工作吗,还是需要使用另一种语言。没有一个输入URL包含“9C8CE56C490F2C87”,那么您从哪里得到它?我认为你需要更好地解释你的问题。你能澄清一下吗。应该匹配的模式是什么?甚至“*”也可以用来匹配任何一行。请再次查看我在顶部编辑的帖子。2个问题——1)有时尾随/是重要的。你可能需要它吗?2) streamid=65335是上一个示例中url的一部分。你需要吗?我发布了一个perl正则表达式解决方案,它可以工作吗,还是需要另一种语言。我需要整个URL,而不仅仅是服务器。但是URL没有所有的尾部。请再次查看顶部我编辑的文章。我需要整个URL,而不仅仅是服务器。但是URL没有所有的尾部。请再次查看顶部我编辑的帖子。我需要完整的URL。但是URL没有所有的尾部。请再次查看顶部我编辑的帖子。我需要完整的URL。但是URL没有所有的尾部。请看我在上面编辑的帖子。抱歉,我正在使用GNU C库ReXEX功能,但是我使用GNU C库ReXeFACE功能,他同意在这种情况下不应该看正则表达式,但是他用C(或C++)来计算它的价值。我同意他不应该在这个例子中看正则表达式,但是他用C(或者C++)来计算它的价值。