Я пытаюсь захватить совпадения, где последняя часть является необязательной, но должна быть зафиксирована, если она присутствует. Но если это необязательно, используя (...)?
, он не захватывается.
Например, с этими двумя строками:
some text and number 18
some other text
Я хотел бы всегда захватывать «некоторые» и захватывать «18», если я вижу «число 18».
Использование /(some).*?(?:number (\d+))/
работает, конечно, с первой строкой, но не со второй:
$ echo "some text and number 18" | perl -nle '/(some).*?(?:number (\d+))/ && print join("\n", $1, $2)'
some
18
$ echo "some other text" | perl -nle '/(some).*?(?:number (\d+))/ && print join("\n", $1, $2)'
$
Но при использовании /(some).*?(?:number (\d+))?/
чтобы сделать последнюю часть необязательной, 1-е совпадение всегда фиксируется, но это не номер:
$ echo "some text and number 18" | perl -nle '/(some).*?(?:number (\d+))?/ && print join("\n", $1, $2)'
some
$ echo "some other text" | perl -nle '/(some).*?(?:number (\d+))?/ && print join("\n", $1, $2)'
some
$
Как я могу захватить необязательную часть?