2013-09-24 37 views
2

我需要一点帮助,我经常exp。PHP带有箭头的正则表达式(>>)

这里是我的本钱:

function formatLink($post) { 
    if(preg_match('/^\>\>[0-9]{+}$/', $post)) { 
     return "<font color=\"red\">".$post."</font>"; 
    } else { 
     return "<font color=\"#b7b7b7\">".$post."</font>"; 
    } 
} 
echo formatLink(">>86721678"); 

而且老实说,我不知道是什么不会发挥作用。它应该适用于像这样的任何字符串:

>>1 

>>87759 

非常类似于类似imageboard的文章。

+1

请更具体一点。它应该做什么,你的测试用例是什么,你对这些测试用例有什么期望,你用当前的代码得到了什么...... – Nanne

回答

3

删除大括号。他们不需要。您还需要添加m修饰符,以允许它在任何行上匹配,而不仅仅是整个帖子。

另外请注意,这只会工作,如果没有其他字面上,甚至没有空间。你可能想这样放松:

/^\s*>>\s*\d+\s*$/m 
+0

感谢您的建议。 你能告诉我如何格式化文本,包括>> 42342例如。 你好>> 42342世界! ?? –

0

你忘了escape

<?php 
function formatLink($post) { 
    if(preg_match('/^\>\>[0-9]{+}$/', $post)) 
    { 
     return "<font color=\"red\">".htmlentities($post)."</font>"; 
    } 
    else 
    { 
     return "<font color=\"#b7b7b7\">".htmlentities($post)."</font>"; 
    } 
} 

echo formatLink(">>86721678"); 

Running example

0

我认为你的问题在你的正则表达式中。 使用这个代替:

if(preg_match('/^\>\>([0-9]+)$/', $post)) { 

见我删除花括号从正则表达式。

0

尝试改变正则表达式

/^\>\>[0-9]*$/