pc表达irc昵称?

时间:2010-10-13 14:17:20

标签: php regex pcre irc

嘿伙计们,我在使用PCRE正确制作irc昵称格式时遇到了一些问题。我对PCRE并不擅长,而且我很喜欢那些使用PCRE /正则表达式的人的一些建议。 :)

我目前正在使用此表达式:/^([^A-Za-z]{1})([^A-Za-z0-9-.]{0,32})$/ 我正在使用它:preg_replace($regex, $replaceWith, $content)

我认为这意味着,从前到后,任何不是第一个字符的A-Z,a-z或0-9的字符都会替换它。之后的任何字符,其中不是A-Z a-z,0-9, - 或。,替换它。

如果有人可以提供帮助,你会大力帮忙。这是阻止我将聊天产品发布到新论坛软件的唯一因素。 :/

2 个答案:

答案 0 :(得分:1)

我一直在使用以下正则表达式检查我的IRC日志中的昵称:

/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/

在preg_match中使用它,如下所示:

preg_match('/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/', $line)

我只是检查一个用户是否在线上说了什么,而且该线不仅仅是一个连接/部分消息或缺口更改或类似的东西,但它也很容易将它放入preg_replace。

根据RFC 2812 Section 2.3.1中的昵称规则匹配缺刻,其中第一个字符必须是字母(a-zA-Z)或特殊字符([]{}^`|_\)以及其余部分字符可以是字母,特殊字母,数字(0-9)或连字符(-)。我选择了基于GTAnet NICKLEN=32的最大长度为32而不是RFC的最大长度为9,因为很多网络似乎都不遵循这个标准。不同的IRC网络之间的最大长度不同,因此请根据需要进行调整。

答案 1 :(得分:0)

我不确定你要替换的是什么,但最好检查字符串是否匹配一个用户名(而不是不匹配),如果没有,则更换“T:

$regex = '/^[a-z][a-z0-9.-]{0,32}$/i';
if (!preg_match($regex, $content))
{
  // do your replace here
}

正则表达式说:

^                   # Beginning of string
  [a-z]             # Match a single a-z
  [a-z0-9.-]{0,32}  # Match between 0 and 32 occurances of a-z, 0-9, . or -
$                   # End of string
/i                  # Make the pattern case-insensitive