2011-02-27 144 views
1

您好,非常感谢您花时间研究此问题。检查字符串中以字符开头的单词@

我正在使用评论系统,而不是使用嵌套注释,我只是想添加@user方法来回复。

因此,让我们说,例如我输入此评论:

@moonwalker: Thanks again for your reply. 

我正在寻找一个函数来检查,如果一个字开头的字符@之后,改变成词的链接。我现在面临的问题是,人们会用之类的东西:

@moonwalker: rest of the message 

@moonwalker, rest of the message 

@moonwalker rest of the message 

,甚至在他们的评论使用EN电子邮件地址。

有没有简单的方法来实现这一点? Preg_match也许?

在此先感谢您的帮助。

+1

我想使用preg_match,并且找到实际上与数据库中的用户名匹配的最长匹配。为了防止来自电子邮件的干扰,请勿在@ – 2011-02-27 21:00:42

+0

之前允许字符,我不知道PHP,但是如果它支持正则表达式,那么您可以像使用'^ @(w /)* $'那样使用RegEx。这将匹配以'@'开始的字符串,然后匹配任意数量的字符[AZ 0-9],然后您可以使用从您使用的任何函数返回的字符串来执行所需的操作,例如将其转换为链接。这有帮助吗? – 2011-02-27 21:02:44

+0

查看一些[正则表达式工具](http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world),可以帮助您测试或设计preg_match表达式。 – mario 2011-02-27 21:04:37

回答

2

试试这个功能:

preg_replace('/(@\w+)/', '<a href=\'#\'>\1</a>', $comment); 
+0

非常感谢。这工作得很好,但它也链接了电子邮件地址的最后部分。我会尝试更新您的代码。 :) – moonwalker 2011-02-27 21:11:13

+1

要求@之前的字符不是a-z或0-9之外的字符,并且您应该从电子邮件地址安全。 – 2011-02-27 21:29:44

+0

嗯...正则表达式绝对不是我的专长。我尝试了一切,但目前为止没有任何效果。我会选择这个答案作为我接受的答案,但我仍然需要禁用电子邮件地址。感谢你的帮助。 – moonwalker 2011-02-27 22:30:46

3

可以使用的preg_match。我没有测试过,但我想这会是这样的:

preg_match("/^\@/", $message) 

然而,我强烈建议你重新考虑协议。添加不可打印字符和多于1个字节会更好。例如,像“0x1 0x12 0x03 0x07”这样的存根。

+0

感谢您的回复。你的preg_match不起作用。你能否给我提供关于非打印字符的更多解释?谢谢! – moonwalker 2011-02-27 21:10:25

+0

对此感到遗憾,事情是写一个注册表,你必须尝试。我想我可能会错过其他文本匹配,比如“/^\ @ \ w +”。 – Spyros 2011-02-27 21:13:30

+0

实际上,我不明白这是一个像实现的Twitter,我以为你在谈论通信协议。所以,可打印的字符不适用于此。 – Spyros 2011-02-27 21:15:57

相关问题