В шаблонах регулярных выражений ab
означает a
, за которым следует b
, что является еще одним способом сказать b
, которому предшествует a
. Не забывайте, что (?<=...)
соответствует нулевым символам с точки зрения окружающего шаблона, так что, как если бы его не было с точки зрения окружающего шаблона. Это означает, что (?<=-)123 (?<=\+)1234
будет соответствовать подмножеству того, что 123 1234
соответствует. Особенно интересно, что шаблон будет соответствовать только в том случае, если перед 1234
стоит пробел.
Подмножество совпадающих строк - это строки, в которых 123
предшествует -
(благодаря (?<=-)
), а 1234
предшествует +
(благодаря (?<=\+)
). Особенно интересно, что шаблон будет соответствовать, только если 1234
предшествует +
.
Поскольку (?<=-)123 (?<=\+)1234
будет совпадать, только если 1234
предшествует пробел и предшествует +
, оно никогда не будет совпадать.
Непонятно, чего вы хотите.
Может быть, вы хотите этого?
$ echo "-123 +1234" | grep -Po '\d+'
123
1234
Может быть, вы хотите этого?
$ echo "-123 +1234" | perl -nle'@m=/\d+/g; print "@m" if @m'
123 1234
Может быть, вы хотите этого?
$ echo "-123 +1234" | perl -nle'print "$1 $2" if /-(\d+) \+(\d+)/'
123 1234