Ответ 1
\\0
- это обратная ссылка, которая вставляет все регулярное выражение в эту точку. Сравните это, чтобы увидеть, что это может означать:
sub("he", "", "hehello")
## [1] "hello"
sub("he\\0", "", "hehello")
## [1] "llo"
С такими строками, как "001.csv"
или "009.csv"
, происходит то, что .*
соответствует нулевым символам, а \\0
повторяет эти нулевые символы один раз, а 00
соответствует первым двум нулям в строке, Успех!
Этот шаблон не будет соответствовать "100.csv"
или "010.csv"
, потому что он не может найти что-либо, что соответствует удвоению, а затем сразу же следуют два 0
s. Он будет, но соответствует "1100.csv"
, потому что он соответствует 1
, затем удваивает его, а затем находит два 0
s.
Итак, чтобы recap, ".*\\000"
соответствует любой строке, начинающейся с xx00
, где x
обозначает любую подстроку с нулем или более символов. То есть, он соответствует чему-то повторенному дважды, а затем следуют два нули.