PHP正则表达式问题:找不到$ C

时间:2011-02-01 23:18:12

标签: php regex utf-8

我正在尝试用混合法语(加拿大语)和英语的文本解析美元金额。该文本采用UTF-8格式。他们使用$ C来表示货币。出于某种原因,当我使用preg_match时,既不能找到'$'也不能找到'C'。其他一切都很好。有什么想法吗?

e.g。使用     preg_match_all('/\$C/u', $match)“感谢支付46,00 $ C”返回空。

3 个答案:

答案 0 :(得分:2)

我认为正则表达式找不到那些字符,因为它们不在那里。如果你这样初始化字符串:

$source = "Thanks for a payment of 46,00 $C";

...(即,作为双引号字符串文字),$C被解释为变量名。由于您从未初始化那个变量,因此实际字符串中的任何内容都不会被替换。您应该使用单引号来初始化字符串,或者像在正则表达式中那样用反斜杠转义美元符号。

顺便说一下,这可能不是编码问题,因为(在该示例中,至少),所有字符都来自ASCII字符集。无论是编码为UTF-8,ISO-8859-1还是ASCII,字符串的二进制表示都是相同的。

答案 1 :(得分:0)

preg_match_all('/\$C/u', 'Thanks for a payment of 46,00 $C', $matches);
print_r($matches);

对我来说很好:

Array
(
    [0] => Array
        (
            [0] => $C
        )

)

答案 2 :(得分:0)

也许这会有所帮助:

// assuming $text is the input string
$matches = array();
preg_match_all('/([0-9,\\.]+)\\s*\\$C/u', $text, $matches);
if ($matches) {
    $price = floatval(str_replace(',', '.', $matches[1][0]));
    printf("%.2f\n", $price);
} else {
    printf("No price found\n");
}

确保输入字符串($text)已正确解码为Unicode字符串。 (例如,如果它是UTF-8,请使用utf8_decode函数。)