鉴于以下行:正则表达式 - 如何提取两个不同字符串之间的字符串?
rebeka mecsek:/export/home5/users/rebeka;
我想从线路获得只有两个字“mecsek”。 单词“rebeka”和“mecsek”之间有一个空格,并且该行以空格开头。
我试过如下:
$homeserver=~s/.*\s//;
但我不想结肠或部分跟随它,只有两个字“mecsek”。
有人能帮助我吗?
非常感谢!
鉴于以下行:正则表达式 - 如何提取两个不同字符串之间的字符串?
rebeka mecsek:/export/home5/users/rebeka;
我想从线路获得只有两个字“mecsek”。 单词“rebeka”和“mecsek”之间有一个空格,并且该行以空格开头。
我试过如下:
$homeserver=~s/.*\s//;
但我不想结肠或部分跟随它,只有两个字“mecsek”。
有人能帮助我吗?
非常感谢!
如何:
$homeserver =~ s/^\S*\s(\S+):.*$/$1/;
您需要将整行匹配,则:
s/[^\s]+ ([^\s+]):.*/$1/
我投模式/(?<=\S\s)([^\s:][^:]*):/
,其结果是在$1
。
兰德尔·施瓦茨(学习的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
;绝对不要无条件使用捕获变量。
感谢很多,它完美的作品! – Freddiboy 2012-02-22 12:11:44
@Freddiboy:不客气。 – Toto 2012-02-22 12:31:45