2013-12-08 42 views
1

我要匹配像一個正則表達式的特定字符的右側:匹配一切

.+|(.+) 

但有時輸入是這樣的:

.+|.+|.+|.+|.+ 

換句話說,我不知道輸入字符串中有多少個管道字符|,但我知道我想提取最右邊的|右側的任何內容。

+0

你例子實際的正則表達式或示例文本輸入? –

回答

0

而不是使用.的,使用一個字符類匹配其他任何字符比|

^.+\|([^|]+)$ 
+0

如果OP想要在最右邊的'|'後面的所有內容,爲什麼後面會有'|'個字符? –

+0

不會有任何。 '[^ |]'匹配除'|'以外的任何字符。 – pobrelkey

+0

我的觀點是它不是必需的。 –

0

假設您的例子到底是串/行的末尾,你可以指定行到最後得到最右邊的管道右邊的值:

^.+\|(.+)$ 

演示:http://regex101.com/r/wR3lP2

0

您可以はNT使用^.+\|([^|]+).*$,這在字符串結尾的情況下|,將捕獲像這樣:

.+|.+|.+|.+|.+| 

捕獲.+

其他建議不否定|擷.+|

0

考慮下面的正則表達式...

\|(\.\+)$ 

祝您好運!

3

換句話說,我不知道|多少管道字符輸入字符串,但我知道我想提取無論是最右邊的|

你可以權使用以下:

[^|]+$ 

正則表達式:

[^|]+ any character except: '|' (1 or more times) 
$  before an optional \n, and the end of the string 
採用0

因此,例如grep的:

echo ".+|.+|.+|.+|foo" | grep -Eo '[^|]+$' 
# => 'foo' 

你也可以使用一個班輪做到這一點,例如:

perl -nle 'print $_ for (split /\|/)[-1]' file 
0

或使用這種簡單的模式([^|]+)$