Я думаю, что это хороший пост, чтобы помочь в разработке регулярных выражений.Хотя довольно просто написать
общее регулярное выражение для соответствия строке, иногда полезно посмотреть на него в обратном порядке после
его разработки.Иногда необходимо посмотреть, какие вещи bizzar будут совпадать.
При смешивании большого количества метачаров в качестве литералов довольно важно форматировать
такого рода для удобства чтения и во избежание ошибок.
Вот несколько примеров в Perl, которые было проще (для меня) создать прототип.
my @samps = (
'{[/abcd asdfasefasdc]}',
'{[# ]}',
'{[# /# \/]}',
'{[/# {[
| /# {[#\/} ]}',
,
);
for (@samps) {
if (m~{\[([#/][^ ]*) ([^]]*)\]}~)
{
print "Found: '$&'\ngrp1 = '$1'\ngrp2 = '$2'\n===========\n\n";
}
}
__END__
Expanded
\{\[
(
[#/][^ ]*
)
[ ]
(
[^\]]*
)
\]\}
Вывод
Found: '{[/abcd asdfasefasdc]}'
grp1 = '/abcd'
grp2 = 'asdfasefasdc'
===========
Found: '{[# ]}'
grp1 = '#'
grp2 = ''
===========
Found: '{[# /# \/]}'
grp1 = '#'
grp2 = '/# \/'
===========
Found: '{[/# {[
| /# {[#\/} ]}'
grp1 = '/# {[
|'
grp2 = '/# {[#\/} '
===========