Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Помогите составить регулярное выражение (https://javascript.ru/forum/server/65660-pomogite-sostavit-regulyarnoe-vyrazhenie.html)

Aetae 01.11.2016 18:50

$subject = "<div>Lorem ipsum.</div>
<div>Lorem</div> ipsum.
Lorem ipsum.
<li>Lorem ipsum.</li>
<div><span>Lorem ipsum.</span></div>";
$pattern = "/(*ANYCRLF)^<div>.*(?<!<\/div>)$|^(?!<div>).+$/imu";
$replacement = "<p>$0</p>";
echo preg_replace( $pattern , $replacement , $subject );

Но вообще регулярками с html работать - моветон.

laimas 01.11.2016 19:01

Aetae,

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

Aetae 01.11.2016 19:07

laimas, соответствует последнему комменту. Впрочем если строки должны содержать переносы - модификация минимальна:
в $subject подаётся массив нужных строк и в регулярке меняется модификатор m на s.

laimas 01.11.2016 19:23

Цитата:

Сообщение от Aetae
соответствует последнему комменту

Виноват, я сам запутался уже. :)

Цитата:

Сообщение от Aetae
в $subject подаётся массив нужных строк и в регулярке меняется модификатор m на s

Вопрос в том строк чего, как понять что есть законченная строка? Если по переносу, то зачем модификатор s? И к тому же открывающий тег может быть в строке N, а закрывающий в Nk. Простая замена модификатора не поможет. :)

Учитывая, что латиница en в utf также представлена одним байтом, а ищем именно латиницу (любой символ вне тега не важен), модификатора u не требуется, замена "Lorem ipsum" на "Русский текст" без этого модификатора никак не скажется на результате.


Часовой пояс GMT +3, время: 13:11.