2016-08-21 135 views
0

我想弄清楚如何把一個字符串的匹配部分放在PHP中的字符串的末尾。如何將匹配的部分放入字符串的末尾?

例如,讓我們說,我們有串這樣的:

"<span>Foo</span> rest of the string" 

在最後,我想獲得這樣的:

"rest of the string Foo" 

代碼:

$string = "<span>Foo</span> rest of the string"; 
//$str = preg_replace("/<span>(.*?)<\/span>/","$1",$string); 

我知道匹配的部分是由$ 1代表的,但我找不到一種方法來結束它。

+0

你必須把其餘的字符串放在另一個捕獲組中。然後交換組。 – Kasramvd

回答

0

$1指第一捕獲組(捕獲組由一對括號的標記) 現在你只需要捕獲字符串的其餘部分在另一個組($2),然後把它放在如更換模式所以:
$str = preg_replace("/<span>(.*?)<\/span>\s*(.*)/","$2 $1",$string);

+0

在我問這個問題沒有奏效之前,我試過了下面的代碼。感謝你的回答,我意識到這是因爲我在模式結束時提出的問號。你能解釋爲什麼嗎? '$ string =「 Foo其餘的字符串」; $ str = preg_replace(「/ (。*?)<\/span>(。*?)/」,「$ 2 $ 1」,$ string);' – 5fth

+0

沒有修改標誌的普通'*'是貪婪匹配,並會嘗試消耗盡可能多。 '*?'是懶惰的匹配,只有在回溯時匹配更多。 查看更多:http://stackoverflow.com/questions/2301285/what-do-lazy-and-greedy-mean-in-the-context-of-regular-expressionions –

+0

所以在你的代碼中,它只會取代部分' Foo'of'的字符串,將'␣'作爲第二組,並且只將該單個空間交換到'Foo'前面 –

相關問題