我想将以下文字转换为列表项
* 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。
我在这里提出的问题更清楚了。
文本可能包含项目符号,也可能没有,我无法按照建议的方式循环访问该文件。
以下是样本
* HTML *SEO * Javascript * PHP
- HTML
- SEO
-Javascript
-PHP
-HTML - SEO -Javascript -PHP
答案 0 :(得分: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>
答案 1 :(得分: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 *澄清更改输出
答案 2 :(得分: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>
标记。祝你好运!