我有一个网址,我正在努力获取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):
([^/]*)\/?$
答案 0 :(得分:2)
请注意,您的[/:?$]
子模式与单个字符匹配,/
或:
,?
或$
(内部为$
符号[...]
不再是特殊的正则表达式运算符。
您可以对第一个否定的字符类进行延迟量化,并添加一个匹配/
或:0
一次或零次的可选组:
([^\/]*?)(?:\/|:0)?$
请参阅regex demo。将0
替换为[0-9]
,以匹配字符串末尾的任意数字。
<强>详情:
([^\/]*?)
- 第1组:尽可能少的/
以外的零个或多个字符(由于*?
量词)(?:\/|:0)?
- 一个可选的非捕获组,与两个替代方案中的一个匹配,1或0次:/
或:0
$
- 字符串结束。