preg_replace与html元素的问题

时间:2014-07-01 14:19:42

标签: php preg-match

我的preg_match解决方案存在问题。

我有以下HTML代码:

<h1> Text marking test</h1><b> Chicago</b> - This is the    text. Can this problem be solved by you?

我也有几乎相似的内容: 芝加哥 - 这是文本。这个问题可以解决吗? 所有多个空格都消失了,问题已变为问题

我想标记:

  1. 芝加哥 - 这是文字。可以吗
  2. 由你解决?
  3. 所以我明白了:

    <h1> Text marking test</h1><div class="marked"><b> Chicago</b> - This is the    text. Can this</div> problem <div class="marked">be solved by you?</div>
    

    我有以下正则表达式模式:

    $string = preg_replace( "/(?im)(<b>)*Chicago([\s,.!?:;'\"]|<([^>]+)>)*-([\s,.!?:;'\"]|<([^>]+)>)*This([\s,.!?:;'\"]|<([^>]+)>)*is([\s,.!?:;'\"]|<([^>]+)>)*the([\s,.!?:;'\"]|<([^>]+)>)*text([\s,.!?:;'\"]|<([^>]+)>)*Can([\s,.!?:;'\"]|<([^>]+)>)*this([\s,.!?:;'\"]|<([^>]+)>)*/", '<div class="marked">' .'${0}'.'</div> , $string);
    

    问题是附加的<b>标记可以是具有任何属性的任何标记,也可以是可选的。 它只能是附加标签,而不是芝加哥之前的任何标签。 但不知怎的,我的尝试经常失败。 任何帮助是极大的赞赏!

2 个答案:

答案 0 :(得分:0)

编辑:我误读了你的问题并删除了我的答案,但在再次阅读之后,我认为它可能会为你提供一些如何进行的指示。我不完全理解这个问题,所以请原谅那个令人不满意的答案。


您想要删除HTML标记的文本以及多个空格。我会分开处理这些事情:

function clean_text($text) {
    $text = strip_tags($text);
    $text = preg_replace('/\s{2,}/', ' ', $text);
    return $text;
}

尽可能使用内置功能 - 重新发明轮子没有任何意义,特别是通常很多人都考虑过这些功能。至于第二部分,我们匹配两个或更多的空格字符,并仅用一个空格替换它们。

答案 1 :(得分:0)

也许您可以在文本分析之前使用&#34;&lt; [^&gt;] *&gt;&#34;删除所有html标记。用replace_all,然后做一个更简单的文本分析正则表达式。 我邀请您使用多个正则表达式而不是制作一个大正则表达式,找到错误或更新程序更加容易