我已经在Google上查找了有关此主题的帮助,但所有答案都忽略了替换方法中的致命缺陷。
本质上,我有一组表情符号,例如:) LocK :eek等,需要用图像标签替换它们。我遇到的问题是识别特定表情符号不是单词的一部分,而是独立存在于一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包括在表情符号替换中,格式为go:forum,user:Username等等。我读过的几乎所有答案都不允许这种可能性,因此会破坏这些链接(即go<img src="image.gif" />orum)。我尝试了各种不同的方法来解决这个问题,例如检查行的开头、空格/换行符等等,但没有太多运气。
非常感谢您对此问题的帮助。哦,还有,我正在使用PHP 5和preg_%函数。
谢谢, 鲁珀特S。
编辑18/04/2011:
感谢大家的帮助:)已创建最终正则表达式,我认为我应该与大家分享,出现了一些问题,涉及特殊空格字符,包括换行符,但现在它的工作就像梦想一样,最终的正则表达式是:
(?<=\s|\A|\n|\r|\t|\v|\<br \/\>|\<br\>)(:S)(?=\s|\Z|$|\n|\r|\t|\v|\<br \/\>|\<br\>)
本质上,我有一组表情符号,例如:) LocK :eek等,需要用图像标签替换它们。我遇到的问题是识别特定表情符号不是单词的一部分,而是独立存在于一行上。例如,在我们的网站上,我们允许“快速链接”,这些链接不包括在表情符号替换中,格式为go:forum,user:Username等等。我读过的几乎所有答案都不允许这种可能性,因此会破坏这些链接(即go<img src="image.gif" />orum)。我尝试了各种不同的方法来解决这个问题,例如检查行的开头、空格/换行符等等,但没有太多运气。
非常感谢您对此问题的帮助。哦,还有,我正在使用PHP 5和preg_%函数。
谢谢, 鲁珀特S。
编辑18/04/2011:
感谢大家的帮助:)已创建最终正则表达式,我认为我应该与大家分享,出现了一些问题,涉及特殊空格字符,包括换行符,但现在它的工作就像梦想一样,最终的正则表达式是:
(?<=\s|\A|\n|\r|\t|\v|\<br \/\>|\<br\>)(:S)(?=\s|\Z|$|\n|\r|\t|\v|\<br \/\>|\<br\>)
(?<=\s)[<:-}]+(?=\s)
- 这应该涵盖了您想要的内容,并且比单词/非单词边界更具体。 - mario\s
表示任何空格,包括换行符。如果主题的结尾没有换行符,则会失败。对于这种情况,请使用(?=\s|$)
。 - mario