嘿伙计们,我在使用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, - 或。,替换它。
如果有人可以提供帮助,你会大力帮忙。这是阻止我将聊天产品发布到新论坛软件的唯一因素。 :/
答案 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