1

我对 preg_replace 函数有疑问。

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

这很好用,但是当 $string 包含 iso-8859-1 字符时,例如“è, ò, à, ù, é, ì”,则认为不是单词,并且全部被删除。

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

IE。如果$string包含èxample输出将是xample.

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

有人对此有解决方案吗?

4

2 回答 2

3

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

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

问题是该范围\xC0-\xFF还包括不受欢迎的字符(例如除号\xF7),因此您必须根据您的要求将其分解为可接受的子范围。查看代码页布局以帮助确定哪些字符可以,哪些不可以。

于 2012-09-04T14:13:45.847 回答
1

尝试

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

echo $r;

在http://writecodeonline.com/php/上测试

输出

1示例

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

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

有关更多详细信息,请参阅regular-expressions.info 上的 Unicode 字符属性。

于 2012-09-04T14:10:24.397 回答