我的preg_match解决方案存在问题。
我有以下HTML代码:
<h1> Text marking test</h1><b> Chicago</b> - This is the text. Can this problem be solved by you?
我也有几乎相似的内容: 芝加哥 - 这是文本。这个问题可以解决吗? 所有多个空格都消失了,问题已变为问题
我想标记:
所以我明白了:
<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>
标记可以是具有任何属性的任何标记,也可以是可选的。
它只能是附加标签,而不是芝加哥之前的任何标签。
但不知怎的,我的尝试经常失败。
任何帮助是极大的赞赏!
答案 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,然后做一个更简单的文本分析正则表达式。 我邀请您使用多个正则表达式而不是制作一个大正则表达式,找到错误或更新程序更加容易