2012-02-22 70 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;絕對不要無條件使用捕獲變量。

相關問題