Почему WinMerge игнорирует одну строку, а другую нет?

Я сравниваю два разных файла и использую эти линейные фильтры:

  • ^' — игнорировать строки, начинающиеся с символа '
  • ^[ |\t]*// - Игнорировать строки, которые начинаются с нуля или более пробелов или табуляций, после //
  • [\/\/]+.* — Игнорировать строки, в которых // начинается с любого количества символов, единственным ограничением являются разрывы строк.

Однако поведение игнорирования кажется непоследовательным:

Почему первый оператор case игнорируется, а второй нет?

Я предполагаю, что это как-то связано с / в присваиваемой строке, но мой фильтр третьей строки явно ищет 2 //, так что не должно быть проблемой...


person sab669    schedule 02.06.2017    source источник
comment
Вы уверены, что [\/\/]+.* делает то, что, по вашему мнению, делает?   -  person Tim Biegeleisen    schedule 02.06.2017
comment
[\/\/]+.* соответствует / до конца строки. [] — это что угодно в этой группе, и вы просто дважды указываете символ /. Так что ему не нужен второй / чтобы сделать матч. Это эквивалентно \/.*   -  person Tezra    schedule 02.06.2017
comment
@sab669 (\/\/)+.* будет соответствовать // до конца строки (.* делает + избыточным). Но это, наверное, то, что вы хотели. ((), а не избыточность)   -  person Tezra    schedule 02.06.2017


Ответы (1)


[\/\/]+.* соответствует / до конца строки. [] означает «что угодно в этой группе», и вы просто дважды указываете символ /. Так что ему не нужен второй / чтобы сделать матч. Это эквивалентно \/.*

(\/\/)+.* соответствует // концу строки (.* делает + избыточным). Но это, наверное, то, что вы хотели. ((), а не избыточность) Эквивалентно \/\/.*

person Tezra    schedule 02.06.2017
comment
@ sab669 Объяснения комментариев включены в ответ. :3 - person Tezra; 02.06.2017