2012-02-22 34 views
2

鉴于以下行:正则表达式 - 如何提取两个不同字符串之间的字符串?

rebeka mecsek:/export/home5/users/rebeka;

我想从线路获得只有两个字“mecsek”。 单词“rebeka”和“mecsek”之间有一个空格,并且该行以空格开头。

我试过如下:

$homeserver=~s/.*\s//; 

但我不想结肠或部分跟随它,只有两个字“mecsek”。

有人能帮助我吗?

非常感谢!

回答

2

如何:

$homeserver =~ s/^\S*\s(\S+):.*$/$1/; 
+0

感谢很多,它完美的作品! – Freddiboy 2012-02-22 12:11:44

+0

@Freddiboy:不客气。 – Toto 2012-02-22 12:31:45

0

您需要将整行匹配,则:

s/[^\s]+ ([^\s+]):.*/$1/ 
0

我投模式/(?<=\S\s)([^\s:][^:]*):/,其结果是在$1

4

记住Randal’s rule

兰德尔·施瓦茨(学习的Perl的作者)说:

使用捕捉或m//g,当你知道你想要什么,以保持
使用split当你知道你想要扔掉

你知道你要保留什么,而是你的避风港’吨告诉我们,你知道的一切。你想要在字符串中的第一个空格后跟随单词字符的运行吗?

print $1, "\n" if $homeserver =~/(\w+)/; 

你想保留的字的最长的,最左边的字符串:/之前,只要出现这种情况是?

print $1, "\n" if $homeserver =~ /(\w+):\//; 

我们可以依赖rebeka在字符串的开头吗?

print $1, "\n" if $homeserver =~ /^rebeka (\w+)/; 

如果不是,假设字符串的开头是连续的单词字符是否安全?

print $1, "\n" if $homeserver =~ /^\w+ (\w+)/; 

当与正则表达式匹配时,定义锚点:您可以依赖的特征在文本中作为标记或书挡存在,以保留您想要的内容。另请注意,上述示例仅在条件内使用$1;绝对不要无条件使用捕获变量。

相关问题