5

我真的一直在为这个问题绞尽脑汁,至于我的生活,我无法弄清楚问题出在哪里。

我有一些数据要运行正则表达式。作为参考,原始文档以 iso-8859-15 编码,如果这有什么不同的话。

这是一个使用正则表达式的函数;

if(preg_match("{£\d+\.\d+}", $handle)) // 
{
    echo 'Found a match';

}
else
{
    echo 'No match found';
}

无论我尝试什么,我似乎都无法匹配。我试过只搜索 £ 符号。我已经检查了我的正则表达式,那里没有任何问题。我什至将源数据直接粘贴到正则表达式测试器中,它找到了我正在寻找的完全匹配。我只是不明白为什么我的正则表达式不起作用。我查看了我正在搜索的字符串中的原始数据,并且£ 符号清晰可见。

我觉得那里有一些我看不到的编码字符,但无论我如何输出数据,我只能看到 £ 符号,但无论出于何种原因,它都没有被识别。

有任何想法吗?是否有绝对的方法来查看字符串中的原始数据?我尝试过 var_dump 和 var_export,但我确实感觉有些地方不太对劲,因为 var_export 确实以不同的语言显示数据。我怎样才能看到我的变量中“真正”的内容是什么?

我什至将内容保存到 txt 文件中。英镑在那里。我应该没有理由不能用我的正则表达式找到它。我只是不明白。如果我创建一个字符串并粘贴到我的正则表达式应该选择的确切测试位中,它会毫无问题地找到匹配项。

真是莫名其妙。

4

2 回答 2

4

你总是可以改变这封信:

$string = '£100.00';
if(preg_match("/\xa3/",$string)){
    echo 'match found';
}else{
    echo 'no matches';
}
于 2012-11-25T20:25:45.440 回答
2

如果您知道十六进制值,则可以在正则表达式中包含任何字符。我认为值是 0A3H,所以试试这个:

 \xa3  // Updated with the correct hex value
于 2012-11-25T20:26:38.887 回答