PHP preg_replace () для нескольких элементов - PullRequest
2 голосов
/ 10 августа 2009

Это то, что я имею до сих пор:

<?php
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text);
?>

Я успешно сопоставляю текстовые списки в формате:

* list item 1
* list item 2

Я бы хотел заменить его на:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
</ul>

Я не могу заставить себя обернуть <ul> и перебрать <li> s! Может кто-нибудь помочь, пожалуйста?

РЕДАКТИРОВАТЬ: Решение, как указано ниже ...

Мой код теперь читает:

$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
$text = preg_replace('/<\/ul><ul>/', '', $text);

Вот и все!

Ответы [ 5 ]

3 голосов
/ 10 августа 2009

Один из вариантов - просто заменить каждый элемент списка на <ul><li>list item X</li></ul>, а затем запустить вторую замену, которая заменит любой </ul><ul> ничем.

2 голосов
/ 26 сентября 2012

Я знаю, что это старый пост, но для него нужно решение. Попробуй это! :)

$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);
0 голосов
/ 10 августа 2009

Я думаю, это то, что вы хотите

<?php

$text = <<<TEXT
* item
* item
TEXT;

$html = preg_replace( "/^\\* (.*)$/m", "<li>\\1</li>", $text );

echo '<ul>', $html, '</ul>';
0 голосов
/ 10 августа 2009

Вы можете использовать preg_match_all , чтобы сопоставить все элементы, а затем переписать их в тегах ul и li.

0 голосов
/ 10 августа 2009

Я не эксперт по регулярным выражениям, но то, что вы хотите сделать, это сопоставить шаблон, который вы имеете, и записать его в обратную ссылку, окружив желаемый шаблон символами (). Затем вы можете поместить 1 доллар (за первую обратную ссылку и т. Д.) В ваш «классный раздел кода»

Regex buddy имеет очень, очень крутое руководство по регулярным выражениям, если вам нужно больше

...