【问题标题】:PHP - match spaces not enclosed by HTML tagsPHP - 匹配没有被 HTML 标签包围的空格
【发布时间】:2012-09-03 10:11:46
【问题描述】:

我有这样的文字:

Word word word <a href=google.com>word word word</a> word word word

我需要空格的位置,它们没有被任何html标签包围——下面带下划线的空格的位置:

Word_word_word_<a href=google.com>word word word</a>_word_word_word

我应该使用什么正则表达式(preg_match())?

【问题讨论】:

标签: php regex


【解决方案1】:

一个相当简单的方法:

$test = 'Word word word <a href=google.com>word word word</a> word word word';
$t = preg_replace('#\s+((?=.*<a)|(?!.*</a>))#', '_', $test);
var_dump($t); 
// string 'Word_word_word_<a href=google.com>word word word</a>_word_word_word'

显然,它不适用于可能包含多个嵌入 href 的字符串;对于这些情况,我建议另一种方法:1)将字符串拆分为&lt;a href...&gt;...&lt;/a&gt; 部分,2)替换非链接部分中的所有空格; 3) 重构字符串。

【讨论】:

  • 谢谢,这就是我要找的。我的文本中不会有嵌入标签。
  • 我还有一个问题:如何将其更改为不匹配 IMG 标签中的空格?编辑:好的,我有它:#\s+((?=.*&lt;a)|(?=.*&lt;img)|(?!.*&gt;))# :)
  • @Siorus 如果这些标签在已处理的字符串中是严格排他的,并且您的 HTML 格式正确,请在给定的正则表达式中将 &lt;a&lt;/a&gt; 替换为 &lt;img/&gt; .否则,您最好使用 HTML 解析器。
【解决方案2】:

使用str_replace函数:

$string = "Sample Sample Sample Sample Sample";
$name = str_replace(' ', '_', $string );
echo $name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多