Во-первых, у вас не включен флаг m
, поэтому $
соответствует концу строки.
Даже если у вас включен флаг m
, регулярное выражение по-прежнему не будет соответствовать.
Это связано с тем, что $
соответствует только позиции конца строки, т. Е. Это совпадение по длине 0, а не символ новой строки \n
.Чтобы сопоставить символ новой строки, вы используете \n
.
Так что (a$|b)(c)$
говорит:
Будет a
, и это будет конецлинии или b
.После этого появляется c
.И c
также является концом строки.
Это противоречит самому себе, потому что если a
находится в конце строки, будет символ новой строки (или ничеговообще) после него, поэтому не может быть c
.Следовательно, ваше регулярное выражение не будет ничего совпадать.
Вместо этого используйте символ \n
:
(a\n|b)c\n