gpt4 book ai didi

java - 正则表达式在字符串之后和空格之间获取字符串

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:49 24 4
gpt4 key购买 nike

我正在解析/var/log/secure 来检查 Linux 中的 sudo 命令,并且需要一个正则表达式来提取执行此操作的用户 ID。

我有一个如下所示的日志条目:

Nov 13 11:44:41 hostname sudo:     accountName : TTY=pts/0 ; PWD=/somedir ; USER=root ; COMMAND=/bin/chmod 777 /tmp/somedir/
Nov 13 11:44:41 hostname sudo: accountName : TTY=pts/0 ; PWD=/somedir ; USER=root ; COMMAND=/bin/chmod 777 /tmp/somedir/

出于某种原因,我遇到了一些日志条目,其中 sudo:accountname 之间有一堆空格。

使用正则表达式,如何提取 sudo: 之后的文本,后跟任意数量的空格,以及在任意数量的空格之前,后跟 :

我一直在使用在线正则表达式测试仪,这是我所能得到的最接近的结果:

((sudo:)[ \t]+).*?([ \t]+)

注意:regex 必须是有效的 java 正则表达式。

最佳答案

只需使用sudo:\\s+([^\\s]+)。这应该匹配 sudo: accountNamesudo: accountNamesudo:account_name 等(如果您想匹配 sudo:accountName,请将第一个加号 + 更改为星号 *)。当它在帐户名后面发现空格时,它会停止。然后,只需获取 matcher.group(1) 的值(即帐户名称)即可。像这样:

Pattern pattern = Pattern.compile("sudo:\\s+([^\\s]+)");
Matcher matcher = pattern.matcher("Nov 13 11:44:41 hostname sudo: accountName : TTY=pts/0 ; PWD=/somedir ; USER=root ; COMMAND=/bin/chmod 777 /tmp/somedir/");
matcher.find(); // Keep in mind this assumes all lines will match
System.out.println(matcher.group(1)); // accountName

这里有一个working example

旁注:您可以使用此方法在一行中完成相同的任务(无需正则表达式):

"Nov 13 11:44:41 hostname sudo:     accountName : TTY=pts/0 ; PWD=/somedir ; USER=root ; COMMAND=/bin/chmod 777 /tmp/somedir/".split("sudo:")[1].trim().split(" ")[0];

这里有一个working example

关于java - 正则表达式在字符串之后和空格之间获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com