4

次のテキストをリストアイテムに変換したい

* Item 1
* Item 2

- item 1
- item 2

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
</ul>

私はこれには十分ではない次の正規表現を作成しました

$text = preg_replace('#(*\s[*.]\s*)#','<li>$0</li>', $text); 

しかし、それは機能しません。私はREを作るのが苦手です。

ここで質問をより明確にします。

テキストに箇条書きが含まれている場合と含まれていない場合があり、atnoが提案したようにファイルをループできません。

これがサンプルです

* HTML *SEO * Javascript * PHP

- HTML
- SEO
-Javascript
-PHP

-HTML - SEO -Javascript -PHP
4

3 に答える 3

2

だから多分次の線に沿った何か:

<?PHP
$text = <<<Text
* HTML *SEO * Javascript * PHP

- HTML
- SEO
-Javascript
-PHP

-HTML - SEO -Javascript -PHP
Text;

$text = preg_replace('/(\*|-)\s*([\S]+)\s*/',"<li>$2</li>\n",$text);

print $text;
?>

これにより、次の出力が得られます。

<li>HTML</li>
<li>SEO</li>
<li>Javascript</li>
<li>PHP</li>
<li>HTML</li>
<li>SEO</li>
<li>Javascript</li>
<li>PHP</li>
<li>HTML</li>
<li>SEO</li>
<li>Javascript</li>
<li>PHP</li>
于 2011-05-30T00:24:17.863 に答える
1

正規表現とは少し厄介ですが、ここに行きます:

<?php
$text = <<<TEXT
* HTML *SEO * Javascript * PHP

- HTML
- SEO
-Javascript
-PHP

-HTML - SEO -Javascript -PHP
TEXT;

$text = preg_replace_callback('`([*-]\s*([^*-\r\n]+)(\r?\n)?)+`', function($m) {
    $str = '<ul>';
    $str .= preg_replace('`[*-]\s*([^*-\r\n]+)\s*`', '<li>$1</li>', $m[0]);
    $str .= '</ul>';
    return $str;
}, $text);

echo $text;

私はこれを出力として取得します:

*snip*の説明により出力が変更されます

于 2011-05-30T00:59:27.330 に答える
0

わかりました、これは私が思いつくことができる最高ですが、それは問題の一部を解決します、多分他の誰かがより良いものを見つけることができます

// first i remove the spaces after the hyphen, like in '- SEO' to have some consistency 
$str = str_replace ('- ','-', $str); 

// then i look for hyphen-word-new line  and replace it with the format i want.
$list = preg_replace('#\-(.*)\n#',"<li>$1</li>\n", $str);

<ul>明らかに、タグがまだ必要なので、これは完全には正しくありません。とても幸運!

于 2011-05-30T00:26:31.420 に答える