为什么这个正则表达式在PHP中不起作用?

时间:2008-10-23 21:41:16

标签: php regex

我需要匹配(不区分大小写)“abcd”和可选的商标符号

正则表达式:/abcd(™)?/gi

参见示例:

preg_match("/abcd(™)?/gi","AbCd™  U9+",$matches);
print_r($matches);

当我运行它时,$matches没有填充任何内容......甚至没有创建为空数组。有什么想法吗?

4 个答案:

答案 0 :(得分:5)

您的文件是如何编码的?在unicode方面,PHP遇到了问题。在您的情况下,请尝试使用转义序列\x99,而不是直接嵌入TM符号。

答案 1 :(得分:3)

注意:我不是PHP大师。但是,这似乎是关于字符编码的问题。例如,您的PHP文件可以编码为win-1252(其中™编码为\x99),您尝试匹配的数据可以编码为UTF-8(其中™编码为{{1反之亦然(即你的文件是UTF-8,你的数据是win-1252)。尝试朝这个方向看,并向我们提供有关您正在做的事情的更多信息。

答案 2 :(得分:2)

我怀疑它与文字商标符号有关。

您可能想查看如何使用Unicode with your regular expressions,然后为trademark symbol嵌入转义序列。

答案 3 :(得分:2)

这是事情的组合......这是最终有效的正则表达式:

/abcd(\xe2\x84\xa2)?/i

我必须删除/g修饰符并将tm符号更改为\xe2\x84\xa2