PCRE似乎正在删除特定字符

时间:2011-02-01 19:34:51

标签: php regex utf-8

我有一段文字(部分法语部分英语),其中多次带有欧洲风格的加拿大元符号($C)。当我尝试使用传统或unicode字符的正则表达式时,符号已从文本中删除,无法匹配。我使用了一个懒惰的正则表达式,所以如果它没有找到预期的符号,它仍然有效。

此外,该文本位于xml utf-8 doc中,并通过Web界面(内部制作)显示。

3 个答案:

答案 0 :(得分:0)

在perl中,正则表达式和代码以ascii显示,但是如果你想在你的文本中嵌入unicode,首先你必须有一个编辑器来执行unicode,其次你必须告诉Perl你的源代码包含unicode(带有unicode) use utf8' pragma)。

如果你不想这样做,你可以在字符串(正则表达式)中嵌入(在Perl中)代码点,使用类似这样的构造$ regex = /这是一些文本,这是:\ x \ n是一个代码点unicode character /;

匹配字符IF数据源解码为Unicode(内化)并包含该字符。

编辑 - 我认为没有加拿大元的unicode,而是'$ C',就像有人说如果正则表达式插值你必须逃避$。 如果你保留$ C,字符类[$ C]匹配$或C,而不是组合。也许(?:\ $ | \ $ C)会是一个更好的锚。

答案 1 :(得分:0)

逃离RegExp中的$,美元符号在RegExp中有特殊含义。

答案 2 :(得分:0)

在我调用eval()之前,问题证明是代码中的错误。法语unicode中的某些内容与传递给eval的代码相混淆,所以通过不合并文本和正则表达式,它工作得很好。