Regex 打印第一个匹配的捕获组并退出

Regex 打印第一个匹配的捕获组并退出,regex,perl,Regex,Perl,我试图从管道输入到perl中获取第一个匹配的第一个捕获组。例如,这将打印所有匹配项: $ printf "hello\nworld" | perl -nle 'print "$1" if m/([a-z]o)/' lo wo 但是, $ printf "hello\nworld" | perl -nle 'print "$1" && exit if m/([a-z]o)/' 不起作用。如何才能获得第一个匹配项?将&&替换为和 打印“$1”并在m/([a-z]o)时退出/ 将和

我试图从管道输入到perl中获取第一个匹配的第一个捕获组。例如,这将打印所有匹配项:

$ printf "hello\nworld" | perl -nle 'print "$1" if m/([a-z]o)/'
lo
wo
但是,

$ printf "hello\nworld" | perl -nle 'print "$1" && exit if m/([a-z]o)/'

不起作用。如何才能获得第一个匹配项?

&&
替换为

打印“$1”并在m/([a-z]o)时退出/

和&
替换为

打印“$1”并在m/([a-z]o)时退出/

因为
&
具有更高的优先级。具体地说,它解析为
(print($1“&&exit)),而不是
(print($1”)和exit)if…
。因此,如果$1为非空且非零,则退出将在打印之前运行,否则打印将打印出一个假值(空字符串)。因为
&&
的优先级远高于
。具体来说,如果…
,它将解析为
(打印($1“&&exit)),而不是
(打印($1”)并退出)。因此,如果$1为非空且非零,则退出将在打印之前运行,否则打印将打印出一个假值(空字符串)。