【问题标题】:How to make a paragraph from a line starting with plus sign (+)如何从以加号(+)开头的行创建一个段落
【发布时间】:2011-06-19 14:27:41
【问题描述】:

我正在做一个简单的文本编辑器,我需要用它来处理创建段落。

段落将采用 WikiDot 语法,长话短说我需要更改的内容:

+ paragraph 1 

更改为

段落

++ subparagraph 1 

更改为

分段

如何在 PHP 中做到这一点?

【问题讨论】:

  • 段落之间的分隔符是什么?换行符(\n)?双换行符(\n\n)?
  • 不要重新发明轮子。 WikiDot 是开源的,它们的解析器是免费提供的。改用它。
  • @lonesomeday 不,我不想有更多代码来维护我现在需要的。但如果我需要扩展功能,我肯定会做你写的。谢谢

标签: php regex parsing text


【解决方案1】:

扩展@CrayonViolent(在第一个替换中断第二个的情况下):

<?php
  $content = "Hello, world

+ Big Heading

++ Smaller heading

Additional content";

   function r($m){
     $tag = "h".strlen($m[1]);
     return "<{$tag}>{$m[2]}</{$tag}>";
   }
   $content = preg_replace_callback('/^(\+{1,6})\s?(.*)$/m','r', $content);

   echo $content;
?>

还在正则表达式中添加了m(多行)标志以获得更好的匹配,并且只会做标题&lt;h1&gt;~&lt;h6&gt;

工作示例可以位于here

【讨论】:

    【解决方案2】:
    $content = preg_replace ("~^\+\+(.*?)\n\n~",'<h2>$1</h2>',$content);
    $content = preg_replace ("~^\+(.*?)\n\n~",'<h1>$1</h1>',$content);
    

    【讨论】:

    • 谢谢,+ 有效,但 ++ 不适用于 ex。当我输入:+ Header\n\n++ Header 2
    • 谢谢你,但布拉德提供了完整的解决方案,但我赞成你的回答是一个重要的部分。
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多