我试图用Java实现这一点:
String patternStr = "\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.*)";
Pattern pattern = Pattern.compile(patternStr);
示例'ls -lrt‘输出:
drwxrwxr-x 2 bhannan bhannan 4096 Jun 2 11:27 HelloWorld.xml
但是它没有从第一组中提取文件名。但是,这个正则表达式适用于regex101.com:
https://regex101.com/r/mR4rH1/2
我在Java上做错了什么?
实际上,如果我能让它发挥作用,那就更好了:
发布于 2016-06-03 06:57:35
发布于 2016-06-03 06:57:49
暗示..。别这么做。不要写出这样一个非常丑陋的正则表达式,它不像人类能够阅读和理解的任何东西。我非常肯定:下次您在IDE中打开这个文件以便对正则表达式进行微妙的更改时,您会发现自己花费了大量的时间来使它正常工作。
意思:为什么是这样?为什么要执行"ls -a";然后让regex忽略大部分输出?指示ls准确地打印您正在寻找的信息难道不是更有意义吗?
发布于 2016-06-03 06:55:24
这应该适用于你:
public static void main(String[] args) {
String s = "drwxrwxr-x 2 bhannan bhannan 4096 Jun 2 11:27 HelloWorld.xml";
System.out.println(s.replaceAll(".*\\s+(\\S+)","$1"));
}
O/P:
HelloWorld.xml
https://stackoverflow.com/questions/37617546
复制