我希望匹配正则表达式:
.+|(.+)
但有时输入如下:
.+|.+|.+|.+|.+
换句话说,我不知道输入字符串中有多少个管道字符|
,但我知道我想要提取最右边|
右侧的任何内容。
答案 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)
答案 3 :(得分:0)
你可能想要使用^.+\|([^|]+).*$
,在字符串以|结尾的情况下,将会像这样捕获:
.+|.+|.+|.+|.+|
捕获.+
其他建议不否定|捕获.+|
答案 4 :(得分:0)
考虑以下Regex ......
\|(\.\+)$
祝你好运!
答案 5 :(得分:0)
或使用此简单模式([^|]+)$