Ваше регулярное выражение работает нормально, и причина, по которой он соответствует второй строке, заключается в том, что вы включили режим DOTALL
, из-за которого .
также соответствует символу новой строки.Просто отключите режим DOTALL
, сняв отметку с режима s
, и вы получите результаты, которые ожидаете.
Regex Demo после отключения режима DOTALL
Кроме того, в вашем третьем примере я не уверен, хотите ли вы, чтобы ваше регулярное выражение было полным или нет, но на случай, если вы намереваетесь соответствовать только [=foo]
, а не [=foo]Lorem ipsum]
, тогда вы должны использовать [^[\]]+
вместо .+
в своем регулярном выражении.
Кроме того, поскольку вы, похоже, хотите соответствовать вашей строке, если она либо окружена "
или '
или ничего с обеих сторон, тогда вы должны также включить "
и '
в класс отрицанных символов, чтобы ваше регулярное выражение не совпадало с вводом, подобным этому [="foo]
.В целом правильное регулярное выражение, которое вы должны использовать, это:
регулярное выражение, которое вы должны использовать точно