2011-03-28 104 views
0

我有一个html代码。像这样:正则表达式替换文本中的空格 

<div> 
    (<- it is a tab) blaaaa ttoooo 
    <span id="span" class="class">Hiii Bye</span> 
    (<- these are 4 space character) 
    <span id="span" class="class">Welcome Back</span> 
</div> 

我想更换任何空间(S)(只有空间:" ",并没有任何标签(\t))><(指之间的空间(S)是不是在一个HTML标签)与&nbsp;。 (PHP和正则表达式)

所以更换后,我的代码它它:

<div> 
    blaaaa&nbsp;ttoooo 
    <span id="span" class="class">Hiii&nbsp;Bye</span> 
    <-&nbsp;these&nbsp;are&nbsp;4&nbsp;space&nbsp;character 
    <span id="span" class="class">Welcome&nbsp;&nbsp;&nbsp;Back</span> 
</div> 

我怎样才能做到这一点?

非常感谢。 ...

+0

[RegEx match open tags but XHTML self-contained tags]可能的重复(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – phihag 2011-03-28 16:50:50

+0

Hooray,又一个想用正则表达式来处理HTML的程序员。 – 2011-03-28 16:50:53

+0

@Matt:为什么不让他们? – mvds 2011-03-28 16:55:29

回答

0

丑陋,但它的工作:

$output = preg_replace_callback("#>[^<]+<#","replace_spaces",$input); 

function replace_spaces($match) 
{ 
    return str_replace(" ","&nbsp;",$match[0]); 
} 

但不是最外层标签之外的空间。

+0

如果在属性或评论中有内容,该怎么办?这不会100%可靠地工作......我怀疑这对任何基于正则表达式的解决方案都是正确的。但也许它够好。 – Brian 2011-03-28 16:59:02

+0

当然不是100%。想想所有的JavaScript将被这个正则表达式切割..我认为有一个属性中的<<是无效的HTML btw。 – mvds 2011-03-28 17:01:36

0

不要。改为使用whitespace: pre CSS声明。

+0

好的,但我前几天写了我的代码... – mrdaliri 2011-03-28 17:03:24

+0

@kikio:你前几天写了哪些代码? – Eric 2011-03-28 17:05:51

+0

我有一个代码。我想要这样做。我在这里提供了一个示例代码.. – mrdaliri 2011-03-28 17:16:44