我有一段文字(部分法语部分英语),其中多次带有欧洲风格的加拿大元符号($C
)。当我尝试使用传统或unicode字符的正则表达式时,符号已从文本中删除,无法匹配。我使用了一个懒惰的正则表达式,所以如果它没有找到预期的符号,它仍然有效。
此外,该文本位于xml utf-8 doc中,并通过Web界面(内部制作)显示。
答案 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的代码相混淆,所以通过不合并文本和正则表达式,它工作得很好。