Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表情符号的复杂PHP/Perl正则表达式_Php_Regex_Perl - Fatal编程技术网

表情符号的复杂PHP/Perl正则表达式

表情符号的复杂PHP/Perl正则表达式,php,regex,perl,Php,Regex,Perl,我在这个问题上向谷歌寻求帮助,但所有的答案都忽略了替换方法中的一个致命缺陷 基本上,我有一组表情符号,比如:)LocK:eek等等,需要用图像标签替换它们。我遇到的问题是确定一个特定的表情符号不是一个单词的一部分,而是单独在一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包含在笑脸替换中,其格式为go:forum、user:Username等。我读过的几乎所有答案都不考虑这种可能性,因此会破坏这些链接(即goorum)。我尝试过用不同的方法来绕过这一点,以检查行的开头、空格/换行符

我在这个问题上向谷歌寻求帮助,但所有的答案都忽略了替换方法中的一个致命缺陷

基本上,我有一组表情符号,比如:)LocK:eek等等,需要用图像标签替换它们。我遇到的问题是确定一个特定的表情符号不是一个单词的一部分,而是单独在一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包含在笑脸替换中,其格式为go:forum、user:Username等。我读过的几乎所有答案都不考虑这种可能性,因此会破坏这些链接(即goorum)。我尝试过用不同的方法来绕过这一点,以检查行的开头、空格/换行符等等,但我运气不太好

对此问题的任何帮助都将不胜感激。哦,我也在使用PHP5和preg_uz%函数

谢谢, 鲁珀特S

2011年4月18日编辑:

感谢您的帮助peeps:)创建了最终的正则表达式,我想与大家分享,在使用包括newline在内的特殊空间角色时遇到了一些问题,但现在它像做梦一样工作最终的正则表达式是:


(?如果要在一次预更换中完成所有更换,请尝试以下操作:

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 |$)