Просто столкнулся с этим странным случаем, нарушив Принцип наименьшего удивления (каким бы субъективным он ни был).
При использовании re: run / 2 я получаю кортежи для захваченных групп.На следующей строке я извлекаю захваченные подстроки.К моему большому удивлению, индексация символов несовместима между этими двумя операциями.Re: run / 2 CaptureData основан на 0, а списки: sublist / 3 основан на 1:
172> Line = "8#123abc#".
"8#123abc#"
173> re:run(Line,"^(\\d+)#(.+#$)").
{match,[{0,9},{0,1},{2,7}]}
174> lists:sublist(Line,0,1).
** exception error: no function clause matching lists:nthtail(-1,"8#123abc#") (lists.erl, line 180)
in function lists:sublist/3 (lists.erl, line 345)
175> lists:sublist(Line,1,1).
"8"
У кого-нибудь есть идеи, как объяснить это удивительное несоответствие?Извините, если этот вопрос больше касается философии решения проблем (решение здесь достаточно очевидно).