用于此的正则表达式模式rtmp://username:password@x、 x.x.x:JAVA的端口/应用程序/流名称

用于此的正则表达式模式rtmp://username:password@x、 x.x.x:JAVA的端口/应用程序/流名称,java,regex,Java,Regex,是否有人可以帮助您使用此正则表达式模式:rtmp://username:password@x、 x.x.x:端口/应用程序/流名称 其中: 组1是主机:x.x.x.x 第2组是端口 第3组是应用程序 组4是streamname 我已经尝试了以下模式,但它似乎并没有像我预期的那样捕获组: ^rtmp://.*?:?.*?[@?]([^/:]+)(:(\\d+))*:?.*/([^/]+)(/(.*))*$ 您可以尝试以下正则表达式: rtmp.*?@(.*?):(\d+)\/(\w+)\/(

是否有人可以帮助您使用此正则表达式模式:rtmp://username:password@x、 x.x.x:端口/应用程序/流名称

其中:

  • 组1是主机:x.x.x.x
  • 第2组是端口
  • 第3组是应用程序
  • 组4是streamname
我已经尝试了以下模式,但它似乎并没有像我预期的那样捕获组:

^rtmp://.*?:?.*?[@?]([^/:]+)(:(\\d+))*:?.*/([^/]+)(/(.*))*$

您可以尝试以下正则表达式:

rtmp.*?@(.*?):(\d+)\/(\w+)\/(\w+)
演示:

与往常一样,如果您可以依赖特定于正在解析的数据的解析器,那么应该避免使用正则表达式

在您的例子中,您正在解析一个URI,因此我建议您依赖
java.net.URI
类:

URI uri = new URI("rtmp://username:password@x.x.x.x:port/application/streamname");
uri.getHost(); // your desired hostname
uri.getPort(); // your desired port
uri.getPath().split('/')[1]; // your desired application
uri.getPath().split('/')[2]; // your desired streamname

你可以。

到目前为止你试过什么?你在哪里卡住了?我已经试过了:^rtmp://.*?:?*?[@?]([^/:]+)(:(:(\\\d+)):?*/([^/]+)(/(.*)*)*$没有正确地获取组我希望你以前的尝试会失败,并出现某种语法错误,因为斜杠(
/
)没有正确转义。