Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 附上ul al li组(可能有多个)_Php_Regex - Fatal编程技术网

Php 附上ul al li组(可能有多个)

Php 附上ul al li组(可能有多个),php,regex,Php,Regex,我试图用给定的字符串生成一个列表块。我想将所有以*开头的行转换为列表。例如: Text... * One * Two Other text. 我用一个php正则表达式完成了它 $source=preg_replace("/^\*([^\n]*)/m","<li>$1</li>",$source); $source=preg\u replace(“/^\*([^\n]*)/m”,“$1”,$source); 如何将所有创建的li组括在“ul”标记之间?。它可能是有三个

我试图用给定的字符串生成一个列表块。我想将所有以*开头的行转换为列表。例如:

Text...
* One
* Two
Other text.
我用一个php正则表达式完成了它

$source=preg_replace("/^\*([^\n]*)/m","<li>$1</li>",$source);
$source=preg\u replace(“/^\*([^\n]*)/m”,“
  • $1
  • ”,$source);

    如何将所有创建的li组括在“ul”标记之间?。它可能是有三个“li”线的块,有十个“li”线,等等。。。我试着搜索所有的家长,比如:
    “不”+
  • +(无论什么)+
  • +(不
  • )”,但这是不可能的。

    我不确定我是否正确理解了你的问题,但是:
    $source=preg\u replace(“/\*([^\r\n]+)/”,“
  • $1
  • ”,$source)

    将改变:

    * Test1
    * Test2
    * Test3
    * Test4
    
    进入:

  • 测试1
  • 测试2
  • 测试3
  • 测试4
  • 编辑:
    $source=preg\u replace(“
  • (.+)
  • ”,“
    • $1
    ”,preg\u replace(“/\*([^\r\n]+)/”,“
  • $1
  • ”,$source))


    。。。将把
  • 附在
    中,我不确定我是否正确理解了您的问题,但是:
    $source=preg\u replace(“/\*([^\r\n]+)/”,“
  • $1
  • ”,$source)

    将改变:

    * Test1
    * Test2
    * Test3
    * Test4
    
    进入:

  • 测试1
  • 测试2
  • 测试3
  • 测试4
  • 编辑:
    $source=preg\u replace(“
  • (.+)
  • ”,“
    • $1
    ”,preg\u replace(“/\*([^\r\n]+)/”,“
  • $1
  • ”,$source))


    。。。将
  • 封装在
    中,您必须匹配
  • 的连续对。
  • 元素,并将其封装在
      中:

      preg_replace('#((?:<li>.*?</li>\s*)+)#', '<ul>\1</ul>', $source);
      

      如果您有任何问题,请告诉我。

      您必须匹配连续的
    • 元素对。
    • 元素,并将它们包装在
        中:

        preg_replace('#((?:<li>.*?</li>\s*)+)#', '<ul>\1</ul>', $source);
        

        如果您有任何问题,请告诉我。

        您是否也将其他文本语法转换为HTML?您是否也将其他文本语法转换为HTML?我认为在这种情况下,它应该有一个多行修饰符,它与我的非常类似。我需要的是,一旦应用了这个正则表达式,将所有“li”组封装到open和close ul标记中。无论如何谢谢你=)我认为在这种情况下,它应该有一个多行修饰符,它与我的非常相似。我需要的是,一旦应用了这个正则表达式,将所有“li”组封装到open和close ul标记中。无论如何谢谢你=)哦,非常感谢这是一个非常有趣的解决方案(只需要避开li结束斜杠)。我想知道。。。为什么小组需要以“?:”开头?@Kenedy更新了我的答案,解释了
        ?:
        的作用。。简而言之,它与任何内容都不匹配:)并且您不需要转义结束斜杠,因为我正在使用
        #
        作为表达式enclosure.Ups。。。对不起,我更正错了。问题是,我将其替换为斜杠表达式附件(以便对所有人使用相同的表达式),但不知道两者之间的区别。再次感谢您的解释,它现在工作得很好:)哦,非常感谢您这是一个非常有趣的解决方案(只需要避开li结束斜杠)。我想知道。。。为什么小组需要以“?:”开头?@Kenedy更新了我的答案,解释了
        ?:
        的作用。。简而言之,它与任何内容都不匹配:)并且您不需要转义结束斜杠,因为我正在使用
        #
        作为表达式enclosure.Ups。。。对不起,我更正错了。问题是,我将其替换为斜杠表达式附件(以便对所有人使用相同的表达式),但不知道两者之间的区别。再次感谢您的解释,它现在工作得很好:)