将所有内容与特定角色的右侧相匹配

时间:2013-12-08 23:02:36

标签: regex grep

我希望匹配正则表达式:

.+|(.+)

但有时输入如下:

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

换句话说,我不知道输入字符串中有多少个管道字符|,但我知道我想要提取最右边|右侧的任何内容。

6 个答案:

答案 0 :(得分:3)

  

换句话说,我不知道输入字符串中有多少个管道字符|,但我知道我想要提取最右边|

您可以使用以下内容:

[^|]+$

正则表达式:

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

所以例如使用grep:

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

您也可以使用单行代码来执行此操作,例如:

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

答案 1 :(得分:0)

使用与.以外的任何字符匹配的字符类,而不是使用|

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

答案 2 :(得分:0)

假设示例的结尾是字符串/行的结尾,您可以指定行尾以获取最右侧管道右侧的值:

^.+\|(.+)$

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

答案 3 :(得分:0)

你可能想要使用^.+\|([^|]+).*$,在字符串以|结尾的情况下,将会像这样捕获:

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

捕获.+

其他建议不否定|捕获.+|

答案 4 :(得分:0)

考虑以下Regex ......

\|(\.\+)$

祝你好运!

答案 5 :(得分:0)

或使用此简单模式([^|]+)$