【问题标题】:Remove all paragraphs based on order (after the 2rd, 3th or 4th...)根据顺序删除所有段落(在第 2、第 3 或第 4... 之后)
【发布时间】:2013-01-02 07:47:13
【问题描述】:

我知道了

$description =  '<p>text1</p><p>text2</p><p>text3</p><p>text4</p><p>textn</p>'

我只想删除&lt;p&gt;text3&lt;/p&gt;之后的内容

我的结果是:

$description = '<p>text1</p><p>text2</p><p>text3</p>'

我的猜测是我们需要将preg_replace 与一些正则表达式一起使用,但我无法编写一个有效的。

【问题讨论】:

  • 快 2013 年了。使用 XML 解析器。
  • 永远不要使用正则表达式来解析 XML。您可能会在未来某处……或过去导致某个随机开发人员的精神崩溃。
  • 正则表达式可能不是这项工作的最佳工具,但我认为如果您的标记是统一的,那么正则表达式可以工作。你还没有给我们文档的结构,所以很难想出一个正则表达式。我不知道我头顶上的 preg 语法,但是像 ((&lt;p&gt;[^&lt;]*&lt;/p&gt;){3}).* 作为一个组,然后替换为 \1
  • @User 如果p 标签未闭合(这是有效的HTML)或包含其他标签,这将非常失败(什么都不做)。

标签: php preg-replace paragraph


【解决方案1】:

你可以...

function str_occurance($needle, $haystack, $occurance) { 
$occurance += 2;
$arr = explode($needle, $haystack, $occurance);
unset($arr[0]);
$arr = array_values($arr);
$key = count($arr) - 1;
unset($arr[$key]);
$str = $needle . implode($needle, $arr);
return $str; 
}

不是最漂亮的,但它确实有效。

编辑:使用:

$description =  '<p>text1</p><p>text2</p><p>text3</p><p>text4</p><p>textn</p>';
$split = '<p>';
$return = 3;
$new = str_occurance($needle, $description, $return);
echo $new; // returns <p>text1</p><p>text2</p><p>text3</p>

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2018-02-14
    相关资源
    最近更新 更多