2016-07-27 6 views
2

Sublime, кажется, думают, что \Z соответствует фактическому концу файла,
и каждому \n, ведущему к нему.Использование возвышенного в поиске регулярных выражений/заменить Z

Является ли это ошибка в Sublime
(смысл, возвышенная или что-то он использует),
или это правильное поведение
и я просто запутался о том, как должны работе?

Вот упрощенная конкретная демонстрация:

Это поиск замены:

Find What:\Z 
Replace With:y 

Вот 4 ЭТУ с:

- the original file contents 
    - the actual result 
    - my expected result 

Eg0 - \n в конце: 0

(Работает так, как я ожидал.)

оригинал:

x0 
x 
x 
x

фактический:

x0 
x 
x 
xy

ожидается:

x0 
x 
x 
xy

((
Stackexchange форматирования путает здесь,
и начинает игнорируя #.* линии,
, и я не знаю, как исправить это,
, но pre. Содержание содержания все еще в порядке.
EDIT:
Фактическое форматирование в пост сам по себе работает ,,
но форматирование перепутались в просмотра поста (который появляется под окном редактирования).
))

EG1 - \n в конце: 1

оригинал:

x1 
x 
x 
x 

фактической:

x1 
x 
x 
xy 
y

ожидается:

x1 
x 
x 
x 
y

ЭГ2 - \n в конце: 2

оригинал:

x2 
x 
x 
x 

фактический:

x2 
x 
x 
xy 
y 
y

ожидается:

x2 
x 
x 
x 

y

EG3 - \n в конце: 3

оригинал:

x3 
x 
x 
x 


фактические:

x3 
x 
x 
xy 
y 
y 
y

ожидается:

x3 
x 
x 
x 


y
+1

Ну, работает '\ z' ->' y' замена, как и ожидалось? –

+0

@ WiktorStribiżew Да, это результат, который я ожидал (т. Е. Идентичный предзаказу «ожидаемый» для каждого, например, выше). Но разве '\ Z' * предполагается * работать так, как есть? –

+1

'\ Z' совпадает с итоговой новой строкой в ​​документе. –

ответ

2

Сначала стоит отметить что Sublime Text использует Повысьте регулярки двигателя поиска и замену функции.

Для получения ожидаемого поведения вам необходимо использовать якорь \z, который соответствует самому концу строки/документа.

\Z может соответствовать перед тем дополнительным количеством символов новой строки в конце, см this Boost regex reference:

\z соответствий в конце только буфер (такой же, как \\').

\Z Соответствует утверждению нулевой ширины, состоящему из необязательной последовательности строк новой строки в конце буфера: эквивалентно регулярному выражению (?=\v*\z). Обратите внимание, что это немного отличается от Perl, который ведет себя так, как если бы он соответствовал (?=\n?\z).

Таким образом, это не ошибка, это, как ожидается, поведение \Z якоря.

+0

Спасибо! Я только что открыл regex101.com и протестировал ['\ Z'] (https://www.regex101.com/r/fC5gW9/1) vs [' \ z'] (https://regex101.com/r/kY2hG0/1) там, и да, я думаю, что я понял это сейчас. Это было просто «\ z», что я хотел в первую очередь в конкретном конкретном практическом контексте, с которым я только столкнулся, я просто никогда раньше не должен был разбираться в этом различии. –

 Смежные вопросы

  • Нет связанных вопросов^_^