PCRE шаблон для подсчета количества символов - PullRequest
0 голосов
/ 12 марта 2012

вот моя строка ввода:
bar somthing foo bar somthing foo

Я бы хотел посчитать количество символов (например, 't') между bar & foo
bar somthing foo-> 1
bar somthing foo -> 1

Я знаю, что мы можем использовать
/bar(.*?)foo/
и затем считать количество символов в совпадениях [1] со строковой функцией

Есть ли способ сделать это без строковой функции для подсчета?

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Решение Perl:

$_ = 'bar test this thing foo';
my $count = /bar(.*?)foo/ && $1 =~ tr/t//;
print $count;

Выход:

4

Просто для удовольствия, используя одно выражение с (?{ code }):

$_ = 'bar test this thing foo';

my $count = 0;
/bar ( (?:(?!bar)[^t])*+ ) (?:t (?{ ++$count; }) (?-1) )*+ foo/x or $count = 0;

print $count;
0 голосов
/ 12 марта 2012

@ Qtax: субъект говорит PCRE ... так что это не совсем perl.Следовательно (? {Code}), скорее всего, не будет поддерживаться (не говоря уже о полном Perl-коде).Хотя оба решения хороши;)

@ tqwer: вы можете получить совпадение, а затем заменить [^ t] на "" и проверить длину ... хотя я не уверен, какой будет логика подсчета с помощью регулярных выражений;)

...