表情符号的复杂PHP/Perl正则表达式
我在这个问题上向谷歌寻求帮助,但所有的答案都忽略了替换方法中的一个致命缺陷 基本上,我有一组表情符号,比如:)LocK:eek等等,需要用图像标签替换它们。我遇到的问题是确定一个特定的表情符号不是一个单词的一部分,而是单独在一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包含在笑脸替换中,其格式为go:forum、user:Username等。我读过的几乎所有答案都不考虑这种可能性,因此会破坏这些链接(即goorum)。我尝试过用不同的方法来绕过这一点,以检查行的开头、空格/换行符等等,但我运气不太好 对此问题的任何帮助都将不胜感激。哦,我也在使用PHP5和preg_uz%函数 谢谢, 鲁珀特S 2011年4月18日编辑: 感谢您的帮助peeps:)创建了最终的正则表达式,我想与大家分享,在使用包括newline在内的特殊空间角色时遇到了一些问题,但现在它像做梦一样工作最终的正则表达式是:表情符号的复杂PHP/Perl正则表达式,php,regex,perl,Php,Regex,Perl,我在这个问题上向谷歌寻求帮助,但所有的答案都忽略了替换方法中的一个致命缺陷 基本上,我有一组表情符号,比如:)LocK:eek等等,需要用图像标签替换它们。我遇到的问题是确定一个特定的表情符号不是一个单词的一部分,而是单独在一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包含在笑脸替换中,其格式为go:forum、user:Username等。我读过的几乎所有答案都不考虑这种可能性,因此会破坏这些链接(即goorum)。我尝试过用不同的方法来绕过这一点,以检查行的开头、空格/换行符
(?如果要在一次预更换中完成所有更换,请尝试以下操作:
preg_replace('/(?<=^|\s)(:\)|:eek)(?=$|\s)/e'
,"'$1'==':)'?'<img src=\"smile.gif\"/>':('$1'==':eek'?'<img src=\"eek.gif\"/>':'$1')"
,$input);
preg_replace('/(?将注释填写成答案:最简单的解决方法是断言表情符号总是被空格包围
(?<=\s|^)[<:-}]+(?=\s|$)
(?在你的模式周围使用单词边界?我尝试过使用它,但我不确定我是否正确使用了它,因为你得到了单词边界而不是单词边界,我不明白这是什么意思?是空格和东西不是单词吗?断言表情符号被空格包围(?是否包括字符/实体,如行首/行尾/换行符等?例如,如果smilie位于行尾,则它不会在一侧被空格包围?\s
表示任何空白,包括换行符。它将在主题的最末端失败(如果没有尾随的换行符存在)。对于这种情况,请使用(?=\s |$)