2017-04-04 48 views
1

我有一個字符串有'>>'。我試圖用'測試>>>>'替換'test'>''。preg_replace兩個箭頭和空格

str_replace函數犯規更換任何東西,所以我已經嘗試使用:

$string = preg_replace("/[\>\ \>]/",">>>>", $string); 

但這種替換字符串中的所有空格以及箭頭。

所以串結束等的'test>>>>>>>>'代替'test >>>>'

+0

「str_replace不會取代任何東西」 - 是的。事實上,它明確地表明它打算做什麼。所以,當我支持你採取不同的方法時,當這種不同的方法失敗時,你應該回到原始代碼並提出一個問題:str_replace的語法要簡單得多,而且能夠在這裏解決任務。正則表達式非常有用,但非常強大,難於理解並且容易出錯*。 – symcbean

回答

1

/[\>\ \>]/正則表達式的單個字符要麼是>,一個空格或>匹配和替換preg_replace多次出現(默認)。

如果沒有特殊情況下的需求,你可以使用一個str_replace

$s = "test > >"; 
echo str_replace('> >', '>>>>', $s); 

PHP demo

如果你想只替換> >不是之後或之前與>,您可以嘗試

echo preg_replace("/(?<!>)> >(?!\s*>)/",">>>>", $s); 

請參閱another PHP demoregex demo

如果>前面帶有>和空間,(?!\s*>)先行將失敗的比賽,如果這裏有0+空格,接着與>> >(?<!>)回顧後會失敗的比賽。

+0

你的答案是有效的,但是沒有使用字符串,它對我的​​字符串有問題 – user3312792

+0

字符串是從數組中取出的,當我打印時我可以看到'>>'但str_replace或preg_replace不會找到帶有空格的箭頭,是有沒有辦法在我嘗試之前清潔琴絃? – user3312792

+0

你的意思是你有一個很難的空間?然後使用'preg_replace(「/> \ s>/u」,「>>>>」,$ s);'。如果在'>'s之間可以有多於1個空格,則在'\ s'後面加'+'。如果你不想匹配'>',linebreak char,'>',用'\ h'替換'\ s'。 –

0
$input_lines = "I have a string which has '> >'. I am trying"; 
echo preg_replace("/(?<!>)> >(?!\s*>)/", "-----", $input_lines); 

輸出將是: 我有有一個字符串 '----'。我正在嘗試

preg_replace(REG_PATTERN,REPLACEMENT,INPUT_STRING);返回所需的輸出。

它可以與任何具有'>>'的字符串一起使用,或者您的字符串中可能有雙倍空間,您可以通過在正則表達式中增加>和>之間的空格來替換該字符串。 快樂編碼。