Preg_replace和iso-8859-1字符匹配

时间:2012-09-04 14:05:02

标签: php regex iso-8859-1

我的preg_replace函数有问题。

在我的代码中,我将使用它来删除字符串开头不是字母或数字的所有字符。

这很好用,但是当$ string包含iso-8859-1这样的字符“è,ò,à,ù,é,”时,它们被认为不是单词,而且都被删除了。

preg_replace('/^[^a-zA-Z0-9]+/', '', $string);

即。如果$string包含èxample,则输出将为xample

我需要包含这些iso-8859-1元音。

任何人都有解决方案吗?

2 个答案:

答案 0 :(得分:3)

PCRE不支持Unicode块(在这种情况下,事情会容易得多),所以除了手动指定允许的字符集(或其否定)之外别无选择。正则表达式看起来像

[^a-zA-Z0-9\xC0-\xFF]+

问题是范围\xC0-\xFF还包含不需要的字符(例如,分号,\xF7),因此您必须根据您的要求将其细分为可接受的子范围。查看codepage layout以帮助确定哪些字符正常,哪些字符不正确。

答案 1 :(得分:1)

尝试

$string = "1èxample";
$r = preg_replace('/^[^\p{L}\p{Nd}]+/', '', $string);

echo $r;

http://writecodeonline.com/php/

上测试

输出

  

1èxample

\p{L}是任何语言的任何字母。所以这匹配任何字母。

\p{Nd}是任何语言的任何数字。

有关详细信息,请参阅Unicode Character Properties on regular-expressions.info