Интерполяция это ваша проблема.И вы не можете использовать ',' с обеих сторон, вы можете использовать только одну сторону.
Редактировать - То есть, если вы ищете в глобальном смысле, тоВы не можете использовать запятую с обеих сторон.Например, если вы хотите найти ВСЕ что-то.Если только найти первое совпадение, то запятая с обеих сторон в порядке.Я не знаю, что такое Java, но вы не можете просто добавить список в регулярное выражение и ожидать, что он совпадет, если сначала он не настроен как чередование.Как "(?:^|,)\\s*(?:elem4|elem6)\\s*(?=,|\$)"
.Наверняка вам нужен еще один побег на пустом месте \\s
.
$value = '(elem.)';
$rx = "(?:^|,)\\s*$value\\s*(?=,|\$)";
или
$rx = '(?:^|,)\s*(elem.)\s*(?=,|$)';
В Perl:
use strict;
use warnings;
my $value = '(elem.)';
my $str = ' elem1, elem2 ,elem3, elem4 ,elem5 ,elem6 ';
my $rx = "(?:^|,)\\s*$value\\s*(?=,|\$)";
while ( $str =~ /$rx/g ) {
print "'$1'\n";
}
Выход
'elem1'
'elem2'
'elem3'
'elem4'
'elem5'
'elem6'