我创建了一个程序,它从putty中获取字符串,并从该字符串中获取processID来杀死processID。目前它工作正常但有时它不可靠。
请找到我在下面使用的目标和正则表达式。
目标字符串:root 14139 1 25 Aug03 ? 06:47:50 /usr/local
RegEx我用过:\\\d{3,5}
我想获得可以在root之后找到立即数的RegEx并忽略其他文本。 (例如,我想从示例字符串中提取14139,删除所有额外空格。)
我该怎么做?
答案 0 :(得分:3)
所以你需要一个由空格分隔的第二个字段中的数字。以下正则表达式在捕获组1中获取它:
^\S+\s+(\d+)
演示:https://regex101.com/r/bE7xL8/1
示例Java代码:
String input = "root 14139 1 25 Aug03 ? 06:47:50 /usr/local";
Pattern pattern = Pattern.compile("^\\S+\\s+(\\d+)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
答案 1 :(得分:0)
我建议这个:
local L = require( "lpeg" )
local function decorate( word )
-- highlighting in UNIX terminals
return "\27[32;1m"..word.."\27[0m"
end
-- matches characters that may be part of an identifier
local idchar = L.R( "az", "AZ", "09" ) + L.P"_"
-- list of keywords to be highlighted
local keywords = L.C( L.P"in" +
L.P"for" )
local function highlight( s )
local p = L.P{
(L.V"nosuffix" + "") * (L.V"exactmatch" + 1)^0,
nosuffix = (keywords / decorate) * -idchar,
exactmatch = L.B( 1 - idchar ) * L.V"nosuffix",
}
return L.match( L.Cs( p ), s )
end
-- tests:
print( highlight"" )
print( highlight"hello world" )
print( highlight"in 0in int for xfor for_ |for| in" )
在开始“^root (\d*)\D?.*
”字符串后以非数字字符分隔后捕获1位或更多位数
答案 2 :(得分:0)
这将更宽容,更少依赖于空间数量,再次使用捕获组:
root[^\d]*(\d+)
答案 3 :(得分:0)
您可以使用以下正则表达式并使用第一组:root[^\S]*(\d+)
答案 4 :(得分:0)
尝试使用此目标字符串,根据您的要求提供输出。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class exampleproblem {
public static void main(String[] args) {
String target = "root 14139 1 25 Aug03 ? 06:47:50 /usr/local";
String regexex = "root(.[0-9]+)";
Pattern pattern = Pattern.compile(regexex);
Matcher matcher = pattern.matcher(target);
while (matcher.find()) {
System.out.println(matcher.group(1).trim());
}
}
}