2010-09-08 88 views
0

我有一种感觉,我可能会错过一些非常基本的东西。反正继承人的情景:preg_replace上另一个preg_replace的匹配

我使用的preg_replace到===inputA===inputB===转换为<a href="inputB">inputA</a>
这是我使用

$new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old); 

它的做工精细还好,但我还需要进一步限制inputB所以其这样

preg_replace('/[^\w]/', '', every Link or inputB); 

因此,基本上,第一个代码,在那里你看到$2那边,我需要对执行操作210,以便它只包含\w,如您在第二个代码中所见。所以,最后的结果应该是这样的:
转换===The link===link's page===<a href="linkspage">The link</a>

我不知道如何做到这一点,我该怎么办?

回答

2

虽然已经有一个公认的答案:这是什么/e改性剂或preg_replace_callback()是:

echo preg_replace(
    '/===(.*?)===(.*?)===/e', 
    '"<a href=\"".preg_replace("/[^\w]/","","$2")."\">$1</a>"', 
    '===inputA===in^^putB==='); 

//Output: <a href="inputB">inputA</a> 

或者:

function _my_url_func($vars){ 
    return '<a href="'.strtoupper($vars[1]).'">'.$vars[2].'</a>'; 
} 

echo preg_replace_callback(
    '/===(.*?)===(.*?)===/', 
    '_my_url_func', 
    '===inputA===inputB==='); 

//Output: <a href="INPUTA">inputB</a> 
+0

很棒,这就是我正在寻找的!谢谢! – 2010-09-08 23:40:41

1

尝试preg_match第一个将2个匹配变成变量,然后使用preg_replace()您想要进一步检查的那个?

1

为什么不从第一个正则表达式(preg_match)中提取匹配,并将结果处理,然后将它们放回HTML表单中?

+1

我在想这是很好,但是这将是展示一些关于如何做到这一点的代码是一个好主意。 – Christophe 2010-09-08 20:13:17

+0

做了一个preg_match_all,然后在循环中使用了str_replace,最后使用了一个preg_replace。但是我发布了这个问题,因为我想知道是否有办法直接在“$ 2”上执行操作。无论如何,谢谢:) – 2010-09-08 21:55:35