PHP 格式化列表项

发布于 2024-11-10 06:13:12 字数 561 浏览 6 评论 0原文

我想将以下文本转换为列表项

* 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

I want to convert following text into list items

* Item 1
* Item 2

- item 1
- item 2

to

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

I have made following regex which is not good enough for this

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

but that does not work. I am not good at making RE.

I am making question more clear here.

A text may contain bullets or may not and I cant loop through the file as atno suggested.

Here are the samples

* HTML *SEO * Javascript * PHP

- HTML
- SEO
-Javascript
-PHP

-HTML - SEO -Javascript -PHP

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

没有心的人 2024-11-17 06:13:12

所以也许类似于:

<?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>

So maybe something along the lines of:

<?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;
?>

which gives an output of:

<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>
捎一片雪花 2024-11-17 06:13:12

使用正则表达式有点令人讨厌,但是在这里:

<?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* clarificationchangesoutput

A little nasty to do with regular expressions, but here you go:

<?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;

I get this as output:

*snip* clarification changes output

山色无中 2024-11-17 06:13:12

好的,这是我能想到的最好的,但它解决了部分问题,也许其他人可以找到更好的

// 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);

显然这不会完全正确,因为您仍然需要

    标签。祝你好运!

ok this is the best i can come up with but it solve part of the problem, maybe someone else can find a better

// 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);

Obviously this will not be completely correct because you still need the <ul> tag. so good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文