2012-09-03 34 views
0

我有這樣一個文本:PHP - 不是HTML標記之間的比賽空間

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())?

+0

可能是有用的:http://stackoverflow.com/questions/9095447/a-php-regex-to-remove-white-spaces-in-html?rq=1和PHP文檔會告訴你使用選項PREG_OFFSET_CAPTURE實現你想要的功能:http://www.php.net/preg_match –

回答

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)將字符串拆分爲<a href...>...</a>部分; 2)替換未鏈接部分中的所有空白; 3)重建字符串。

+0

謝謝,這就是我一直在尋找的東西。我的文本中不會嵌入標籤。 –

+0

我還有一個問題:如何將其更改爲不匹配IMG標籤中的空格?編輯:好吧,我有它:'#\ s +((?=。* ))#' :) –

+0

@Siorus如果這些標籤嚴格排除在處理過的字符串中, HTML是格式正確的,在給定的正則表達式中相應地替換''與''。否則,你最好使用HTML解析器。 – raina77ow

0

使用str_replace功能:

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