鑑於以下行:正則表達式 - 如何提取兩個不同字符串之間的字符串?
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