首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使这个正则表达式在Java中工作,以便从Linux 'ls -lrt‘输出中获取文件名?

如何使这个正则表达式在Java中工作,以便从Linux 'ls -lrt‘输出中获取文件名?
EN

Stack Overflow用户
提问于 2016-06-03 14:52:27
回答 5查看 108关注 0票数 2

我试图用Java实现这一点:

代码语言:javascript
代码运行次数:0
运行
复制
    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‘输出:

代码语言:javascript
代码运行次数:0
运行
复制
drwxrwxr-x    2 bhannan  bhannan      4096 Jun  2 11:27 HelloWorld.xml

但是它没有从第一组中提取文件名。但是,这个正则表达式适用于regex101.com:

https://regex101.com/r/mR4rH1/2

我在Java上做错了什么?

实际上,如果我能让它发挥作用,那就更好了:

https://regex101.com/r/mR4rH1/1

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-03 14:57:35

我建议在Java中这样做:

代码语言:javascript
代码运行次数:0
运行
复制
str = str.replaceFirst("^.*\\d{2}:\\d{2}\\s+", "");

其中str表示ls -la输出的每一行。

RegEx演示

票数 1
EN

Stack Overflow用户

发布于 2016-06-03 14:57:49

暗示..。别这么做。不要写出这样一个非常丑陋的正则表达式,它不像人类能够阅读和理解的任何东西。我非常肯定:下次您在IDE中打开这个文件以便对正则表达式进行微妙的更改时,您会发现自己花费了大量的时间来使它正常工作。

意思:为什么是这样?为什么要执行"ls -a";然后让regex忽略大部分输出?指示ls准确地打印您正在寻找的信息难道不是更有意义吗?

票数 1
EN

Stack Overflow用户

发布于 2016-06-03 14:55:24

这应该适用于你:

代码语言:javascript
代码运行次数:0
运行
复制
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:

代码语言:javascript
代码运行次数:0
运行
复制
HelloWorld.xml
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37617546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档