Regex 打印第一个匹配的捕获组并退出
我试图从管道输入到perl中获取第一个匹配的第一个捕获组。例如,这将打印所有匹配项: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)时退出/ 将和
$ 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为非空且非零,则退出将在打印之前运行,否则打印将打印出一个假值(空字符串)。