比如:有
r b avm fre re pi po fr sr cy in sy cs us sy id wa
6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1
2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1
4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0
2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1
3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0
.....................
这一串一串的字符串,(有回车换行)
一行一行的用正则表达式解析。然后。输出
fre
36877
36783
36678
36541
37905
前面的那个fre可以不考虑,就输出下面的那一行一行的,求教啊
正则表达式怎么写?谢谢了,什么语言都可以。
r b avm fre re pi po fr sr cy in sy cs us sy id wa
6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1
2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1
4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0
2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1
3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0
.....................
这一串一串的字符串,(有回车换行)
一行一行的用正则表达式解析。然后。输出
fre
36877
36783
36678
36541
37905
前面的那个fre可以不考虑,就输出下面的那一行一行的,求教啊
正则表达式怎么写?谢谢了,什么语言都可以。
6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1\n\
2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1\n\
4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0\n\
2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1\n\
3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0\n";var result = [];
s.replace(/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm, function($0, $1) {
result.push($1);
});
alert(result.join("\n"));输出:
fre
36877
36783
36678
36541
37905
var str = "r b avm fre re pi po fr sr cy in sy cs us sy id wa\n\
6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1\n\
2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1\n\
4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0\n\
2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1\n\
3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0\n";
var reg = /^\s*(?:\S+\s+){3}(\S+)/mg;
var result;
while((result = reg.exec(str)) != null)
{
document.write(RegExp.$1 + "<br />");
}
</script>
------------------------------------------------
\D*匹配所有非数字例如每行开始的 ^和空格
(\d*\D*){3} 匹配后续数字非数字的连续组合3次,此时为止就到你要的数据了
然后分组捕获(\d+)捕获你要的结果
.+,在单行模式下,匹配剩下所有字符直到行尾。
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
g:全局模式搜索全部匹配内容
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
m:多行模式,^表示行首,$表示行尾,.不匹配换行符。
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
^行首开始匹配
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\s*捕获空白字符
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\S+捕获例如:6
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\s+捕获连续多个空白字符
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\S+捕获非空白字符,例如:0
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\s+捕获连续空白字符
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\S+捕获非空白字符,例如911263
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
\s+捕获你要的结果之前最后的空白字符
/^\s*\S+\s+\S+\s+\S+\s+(\S+)/gm
(\S+)捕获非空白字符,并装入分组,以便获取分组信息得到结果。
/^\s*(?:\S+\s+){3}(\S+)/mg;
m,g同上
^同上
/^\s*(?:\S+\s+){3}(\S+)/mg;
\s*匹配行首开始的空白字符,尽可能多匹配
/^\s*(?:\S+\s+){3}(\S+)/mg;
(?:\S+\s+){3}是连续捕获“非空白字符多个”“空白字符多个”的组合3次就到你需要的位置了
(\S+)同上,你要的结果。分组捕获,以便获取分组1信息。
<403 np2smc1:/home/smc>vmstat 5 5System configuration: lcpu=4 mem=3744MBkthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1
2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1
4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0
2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1
3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0
带入如上,
需求:下面的列太多了,比如,我只想要第四列,也就是fre
36877
36783
36678
36541
37905当然,可以根据需求,显示需要显示的列,,用javascript,就是楼上有两位兄台写的可以,在下技术浅薄,所以还望各位帮忙转一下,C语言之类的,java之类的,都可以,实在是想不出怎么去掉前面和后面的,在此谢过各位了。
+ "\n"
+ "System configuration: lcpu=4 mem=3744MB\n"
+ "\n"
+ "kthr memory page faults cpu\n"
+ "----- ----------- ------------------------ ------------ -----------\n"
+ " r b avm fre re pi po fr sr cy in sy cs us sy id wa\n"
+ " 6 0 911263 36877 0 0 0 0 0 0 611 11494 6356 9 5 86 1\n"
+ " 2 0 911243 36783 0 0 0 0 0 0 551 10546 6439 9 5 86 1\n"
+ " 4 0 911226 36678 0 0 0 0 0 0 542 9945 6362 9 4 87 0\n"
+ " 2 1 911245 36541 0 0 0 0 0 0 559 9901 6384 9 5 86 1\n"
+ " 3 0 911244 37905 0 0 0 0 0 0 766 10088 6824 9 5 87 0\n";
String pattern = "(?m)^\\s*(?:\\d+\\s+){3}(\\d+)";
Matcher m = Pattern.compile(pattern).matcher(str);
while(m.find())
{
System.out.println(m.group(1));
}
这里不是需要group(1)
而是直接用正则表达式得到那一列,如果是用group(1)的话,上面,他们写的也可以,呵呵,谢谢了,还是不纠缠这个东西来,先去学点基础的来,
嗯,最好不要纠缠这些哈
只要是用在程序中,是group(1)还是group()其实并不重要,首先是可用,然后是效率
语言不同,对正则的支持也不同,Java中的逆序环视(?<=exp)只支持固定长度的表达式,所以仅用一个正则而不用捕获组在Java中是做不到的,目前只有.NET等有限几种语言能做到
而事上,不用捕获组未必就是好事,通常用逆序环视的效率是赶不上捕捉组的
同样的,多个正则来实现未必就比一个正则实现差,主要看运用的是否得当了所以,因地制宜,还是不要纠缠于这些的好