Почему бы просто не включить скобки в поиск?Если URL-адреса всегда будут заключены в квадратные скобки, то что-то вроде этого:
#!/usr/bin/perl
use warnings;
use strict;
use Regexp::Common qw/URI/;
my $str = "Hello!!, I love (http://www.google.com)";
my ($uri) = $str =~ / \( ( $RE{URI} ) \) /x;
print "$uri\n";
Регулярное выражение из Regex :: Common можно использовать как часть более длинного регулярного выражения, его не нужно использовать отдельно.,Также я использовал модификатор 'x' в регулярном выражении, чтобы разрешить пробелы, чтобы вы могли более четко видеть, что происходит - скобки с обратными слешами обрабатываются как совпадающие символы, а те, которые не определяют, что сопоставить (предположительно, как{-keep} - я не использовал это раньше).
Вы также можете сделать скобки необязательными, например:
/ (?: \( ( $RE{URI} ) \) | ( $RE{URI} ) ) /
, хотя это приведет к двум переменным соответствия,один неопределенный - поэтому понадобится что-то вроде следующего:
my $uri = $1 || $2 || die "Didn't match a URL!";
Возможно, есть лучший способ сделать это, а также, если вас не беспокоит совпадение скобок, вы можете просто сделать скобки необязательными (черезa '?') в первом регулярном выражении ...
Чтобы ответить на ваш второй вопрос, касающийся только совпадающих URL-адресов в конце строки, взгляните на регулярные выражения Regex, которые могут привести к совпадению с началомили конец строки: ^ и $ (или \ A и \ Z, если хотите).например, сопоставление URL только в конце строки:
/$RE{URI}\Z/