我的preg_replace函数有问题。
在我的代码中,我将使用它来删除字符串开头不是字母或数字的所有字符。
这很好用,但是当$ string包含iso-8859-1这样的字符“è,ò,à,ù,é,”时,它们被认为不是单词,而且都被删除了。
preg_replace('/^[^a-zA-Z0-9]+/', '', $string);
即。如果$string
包含èxample
,则输出将为xample
。
我需要包含这些iso-8859-1元音。
任何人都有解决方案吗?
答案 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。