Знак доллара в регулярном выражении и новый символ линии
Я знаю, что знак доллара используется для сопоставления символа в конце строки, чтобы убедиться, что поиск не останавливается в середине строки, но вместо этого продолжается до конца строки.
Но как он относится к символу новой строки, соответствует ли он непосредственно перед символом новой строки или учитывает это.
Я проверил его в regex eclipse, для массива строк, соответствующих регулярному выражению
([A-Za-z ]+)$\n
работал, а не наоборот ([A-Za-z ]+\n)$
Ответы
Ответ 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
, чтобы обозначить конец строки очень (если он поддерживается вашим механизмом регулярных выражений).
Источник