2

これは私がこれまでに持っているものです:

<?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>sをラップしてループすることに頭を悩ませることはできません<li>!誰か助けてもらえますか?

編集:以下に答えた解決策...

私のコードは次のようになります。

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

やった!

4

4 に答える 4

4

1 つのオプションは、単純に各リスト項目を置き換えてから<ul><li>list item X</li></ul>、2 つ目の置換を実行して、すべて</ul><ul>を何も置き換えないことです。

于 2009-08-09T22:33:29.090 に答える
2

これが古い投稿であることは知っていますが、解決策が必要です。これを試して!:)

$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);
于 2012-09-26T03:18:36.513 に答える
0

私は正規表現の専門家ではありませんが、あなたがやりたいことは、あなたが持っているパターンを一致させ、目的のパターンを()で囲むことによってそれを後方参照に取り込むことです。次に、「素晴らしいコードセクション」に$ 1(最初のバックリファレンスなど)を配置できます。

Regexバディには、もっと必要な場合に正規表現に関する本当に本当に素晴らしいチュートリアルがあります

于 2009-08-09T22:29:29.630 に答える
0

私はこれがあなたが望むものだと思います

<?php

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

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

echo '<ul>', $html, '</ul>';
于 2009-08-09T22:40:45.130 に答える