我在php中有2个文本字符串,我想将它们更改为html标签
首先:
*.some text
* some text
和第二:
#.sometext
# sometext
我想将以'*.' or '* '
开头的第一个字符串更改为<li>
,并将'\r'
或'\n'
更改为</li>
我希望将以'#.' or '# '
开头的第二个字符串更改为<ol>
,然后将'\r'
或'\n'
更改为</ol>
我写了这个正则表达式代码但不起作用:
$regex1 = "#([*.])(.*)([\n])#e";
$text = preg_replace($regex1,"('<li>$2</li>')",$text);
$regex2 = "#([#.])(.*)([\n])#e";
$text = preg_replace($regex2,"('<ol>$2</ol>')",$text);
我该怎么办?
非常感谢
答案 0 :(得分:0)
我建议您对代码进行一些更改,我将在下面解释。
首先是代码:
<?php
$text = "
first :
*.some text
* some text
and second :
#.sometext
# sometext
";
$regex1 = "#\*(.| )(.*?)\n#";
$text = preg_replace($regex1,"<li>$2</li>\n",$text);
$regex2 = "#\#(.| )(.*?)\n#";
$text = preg_replace($regex2,"<ol>$2</ol>\n",$text);
echo $text;
和输出
first :
<li>some text</li>
<li>some text</li>
and second :
<ol>sometext</ol>
<ol>sometext</ol>
的变化:
e
修饰符*.
和*
,只需指定*
(转义为\*
,并指定.
的OR条件(转义为{{} 1}})和\.
。
,即.*
,以便您只吃尽可能少的文字。 PS:这可能不是你想要的(ol有这个结构:.*?
,但我把代码编写到你的问题规范中。你应该可以修改它。
答案 1 :(得分:0)
$str=<<<STR
abc
*.some text
* some text
def
STR;
echo preg_replace('/[\r\n]+<\/li>/i',"</li>",preg_replace('/\*[\.\s](.*)$/im',"<li>$1</li>",$str));
以上将输出:
abc
<li>some text</li>
<li>some text</li>
def
可以做出类似的改变来完成你的第二个要求。
我使用两个正则表达式的原因是,如果你的字符串看起来像
$str=<<<STR
abc
*.some text
* some text
STR;
没有最后一行,所以最后一行可能不匹配。所以我使用m
修饰符和$
来匹配每个行尾。
但测试结果显示仅使用$
将最终结果如下:
abc
<li>some text
</li>
<li>some text</li>
为了避免这种情况,我添加了另一个正则表达式来修复[newline]</li>
。