我有這樣一個文本: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()
)?
我有這樣一個文本: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()
)?
一個相當簡單的方法:
$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)重建字符串。
謝謝,這就是我一直在尋找的東西。我的文本中不會嵌入標籤。 –
我還有一個問題:如何將其更改爲不匹配IMG標籤中的空格?編輯:好吧,我有它:'#\ s +((?=。* ))#' :) –
@Siorus如果這些標籤嚴格排除在處理過的字符串中, HTML是格式正確的,在給定的正則表達式中相應地替換''與''。否則,你最好使用HTML解析器。 –
raina77ow
使用str_replace
功能:
$string = "Sample Sample Sample Sample Sample";
$name = str_replace(' ', '_', $string);
echo $name;
可能是有用的: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 –