2016-08-21 48 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'前面 –

相关问题