Подтвердить что ты не робот

Знак доллара в регулярном выражении и новый символ линии

Я знаю, что знак доллара используется для сопоставления символа в конце строки, чтобы убедиться, что поиск не останавливается в середине строки, но вместо этого продолжается до конца строки.

Но как он относится к символу новой строки, соответствует ли он непосредственно перед символом новой строки или учитывает это.

Я проверил его в regex eclipse, для массива строк, соответствующих регулярному выражению ([A-Za-z ]+)$\n работал, а не наоборот ([A-Za-z ]+\n)$

4b9b3361

Ответ 1

Обратите внимание, что ^ и $ являются токенами zero-width. Таким образом, они не соответствуют любому символу, а скорее соответствуют position.

  • ^ соответствует позиции перед первым символом в строке.
  • $ соответствует позиции перед первым newline в строке.

Таким образом, String до $, конечно, не включал бы newline, и именно поэтому ([A-Za-z ]+\n)$ ваше регулярное выражение не удалось, а ([A-Za-z ]+)$\n - успешно.

Простыми словами, за $ должен следовать newline и никакой другой символ.

Ответ 2

Если шаблон заканчивается символом новой строки, тогда $ обычно совпадает с этим символом. Это по крайней мере для Perl, PCRE, Java и .NET. ( изменить:, как указывает Тим ​​Питцкер в комментарии, \r не считается перерывом строки .NET)

Это было введено, потому что ввод, который считывается из строки, заканчивается символом новой строки (по крайней мере, в Perl), который можно легко игнорировать таким образом.

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

Источник