Как выбрать строку целиком?

Как в регулярном выражении задать строку от начала до конца?

(\A(^\Z)*\Z) 

начало строки, не конец строки , конец строки.
Но так не работает.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

\A(^\Z)*\Z означает "начало строки", ноль и более начал строки, за которым следует конец строки, а затем конец строки. Бессмыслица. Наверное, вы полагаете, что ^ в (^\Z) служит отрицанием, но это не так. Даже если вы используете отрицающий символьный класс и поместите в него \Z (т.е. [^\Z]), он не станет находить всё кроме конца строки, так как символьные классы используются для поиска символов, а не позиций в строке. Все такие специальные символы - $, ^, \z, \Z, \b (граница слова) - перестают быть таковыми в символьных классах.

Чтобы найти строку целиком, нужно использовать

(?s)\A.*\z # PCRE, .NET, Java, RE2
(?s)\A.*\Z # Python re
^[^]*$     # JavaScript
(?m)\A.*\z # Onigmo (Ruby)

Где

  • (?s) (в Onigmo (?m)) - модификатор, который изменяет поведение точки, которая теперь находит символ переноса строки
  • \A - начало строки
  • \z / $ / \Z - конец строки.
→ Ссылка