正则表达式结束字符可以是2之一

时间:2017-03-23 19:01:27

标签: regex

我有一个网址,我正在努力获取id。问题是,网址可能如下 Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session=jsch.getSession(user, host, 22); session.setPassword(password); session.setConfig(config); session.connect(); System.out.println("Connected"); Channel channel=session.openChannel("exec"); //write the command, which expects password ((ChannelExec)channel).setCommand("command"); ((ChannelExec)channel).setErrStream(System.err); ((ChannelExec)channel).setPty(true); System.out.println("Password taken"); InputStream in=channel.getInputStream(); channel.connect(); OutputStream out=channel.getOutputStream(); //give the password below out.write(("password\n").getBytes()); out.flush(); //write your commands PrintStream out1= new PrintStream(out); out1.println("command1"); out1.println("command2"); ................... out1.flush(); "https://www.website.com/blah/1234567890:0""https://www.website.com/blah/1234567890/"

现在是第一个给我带来麻烦的选择。基本上,我想要的只是“1234567890”,所以对于最后一个选项,我需要省略:0。

以下是我在使用/不结束时捕获id时尝试的内容:

"https://www.website.com/blah/1234567890"

这是我试图用/无结尾/和:0覆盖的内容,但它不能正常工作(id是匹配6,但我无法知道它总是6):

([^/]*)\/?$

1 个答案:

答案 0 :(得分:2)

请注意,您的[/:?$]子模式与单个字符匹配,/:?$(内部为$符号[...]不再是特殊的正则表达式运算符。

您可以对第一个否定的字符类进行延迟量化,并添加一个匹配/:0一次或零次的可选组:

([^\/]*?)(?:\/|:0)?$

请参阅regex demo。将0替换为[0-9],以匹配字符串末尾的任意数字

<强>详情:

  • ([^\/]*?) - 第1组:尽可能少的/以外的零个或多个字符(由于*?量词)
  • (?:\/|:0)? - 一个可选的非捕获组,与两个替代方案中的一个匹配,1或0次:/:0
  • $ - 字符串结束。