У меня есть текст:
Curabitur nec bibendum erat.Sed Scelerisque Arcu, Facilisis Bibendum Mauris.Mauris sed sapien volutpat, volutpat risus in, bibendum odio.Вестибюль ЭГЕТ НЕКЕ Лорем КУРАБИТУР хрип.Aenean mollis ipsum ut facilisis egestas.Pellentesque finibus sed ante eget interdum.Nunc fringilla ante a egestas mattis.Sed tincidunt libero a dapibus bibendum.Morbi ac sapien Vehicleula, condimentum justo eget, curabitur nisl.Cras rutrum molestie diam, ac maximus mauris auctor quis.Ut vel diam nunc.Aliquam auctor, magna ac finibus fermentum, orci libero contectetur magna, id scelerisque tellus sem et orci.
В PHP я бы хотел обернуть слово «curabitur» тегом <mark>
как <mark>$1</mark>
с использованием нечувствительного корпуса.
Этот следующий код работает:
return preg_replace("/(" . $needle . ")/mi", "<mark>$1</mark>", $haystack );
Выход:
Curabitur necБибендум Эрат.Sed Scelerisque Arcu, Facilisis Bibendum Mauris.Mauris sed sapien volutpat, volutpat risus in, bibendum odio.Vestibulum eget neque lorem CURABITUR rhoncus.Aenean mollis ipsum ut facilisis egestas.Pellentesque finibus sed ante eget interdum.Nunc fringilla ante a egestas mattis.Sed tincidunt libero a dapibus bibendum.Morbi ac sapien vehicleula, condimentum justo eget, курабитур нисл.Cras rutrum molestie diam, ac maximus mauris auctor quis.Ut vel diam nunc.Aliquam auctor, magna ac finibus fermentum, orci libero contectetur magna, id scelerisque tellus sem et orci.
НО, если у вас есть этот текст:
[Curabitur] nec bibendumи требовалось.Sed Scelerisque Arcu, Facilisis Bibendum Mauris.Mauris sed sapien volutpat, volutpat risus in, bibendum odio.Вестибюль ЭГЕ НЕТЕ ЛОРЕМ [КУРАБИТУР] РОНКУСAenean mollis ipsum ut facilisis egestas.Pellentesque finibus sed ante eget interdum.Nunc fringilla ante a egestas mattis.Sed tincidunt libero a dapibus bibendum.Morbi ac sapien vehicleula, condimentum justo eget, [curabitur] nisl.Cras rutrum molestie diam, ac maximus mauris auctor quis.Ut vel diam nunc.Aliquam auctor, magna ac finibus fermentum, orci libero contectetur magna, id scelerisque tellus sem et orci.
и $needle = [curabitur]
вам следует использовать preg_quote()
для экранирования символов [
, ]
Однако следующее НЕ работает:
return preg_replace("/(" . preg_quote( $needle ) . ")/mi", "<mark>$1</mark>", $haystack );
, поскольку $1
было изменено на preg_quote()
.
Как я могу решить эту проблему?