2011-03-28 66 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