用于匹配所有特殊字符的PHP正则表达式,包括重音字符

时间:2013-09-17 13:24:29

标签: php regex

我正在寻找一种匹配字符串中所有可能的特殊字符的方法。 我有一个世界上的城市列表,这些城市的许多名称都包含特殊字符和重音字符。所以我正在寻找一个正则表达式,它将为任何类型的特殊字符返回TRUE。 我找到的所有的只匹配一些,但我需要一个可用的特殊字符,包括字符串开头的空格。 这可能吗?

这是我发现的那个,但与我在城市名称中可能遇到的所有不同和可能的角色不符:

preg_match('/[#$%^&*()+=\-\[\]\';,.\/{}|":<>?~\\\\]/', $string);

4 个答案:

答案 0 :(得分:1)

您将需要UTF8模式“#pattern #u”:http://nl3.php.net/manual/en/reference.pcre.pattern.modifiers.php

然后您可以使用Unicode转义序列:http://nl3.php.net/manual/en/regexp.reference.unicode.php

所以preg_match(“#\ p {L} * #u”,“København”,$ match)将匹配。

答案 1 :(得分:0)

使用unicode属性:

\pL代表任何字母

要匹配城市名称,我会这样做(我认为-和空格是有效字符):

preg_match('/\s*[\pL-\s]/u', $string);

答案 2 :(得分:0)

你可以改变你的模式......以匹配你不会使用的所有“a-Z09-_”

preg_match('/[^-_a-z0-9.]/iu', $string);

字符类中的^将其反转。

答案 3 :(得分:0)

我有同样的问题,我想分割也包含特殊字符的名称部分:

例如,如果要拆分包含以下内容的一组名称:

<lastname>,<forename(s)> <initial(s)> <suffix(es)>

fornames和suffix用(白色)空格分隔 首字母用a分隔。并且最多有6个首字母

你可以使用

$nameparts=preg_split("/(\w*),((?:\w+[\s\-]*)*)((?:\w\.){1,6})(?:\s*)(.*)/u",$displayname,null,PREG_SPLIT_DELIM_CAPTURE);
//first and last part are always empty
array_splice($naamdelen, 5, 1);
array_splice($naamdelen, 0, 1);
print_r($nameparts);

输入:
Powers,Björn B.A. van der
输出:
Array ( [0] => Powers[1] => Björn [2] => B.A. [3] => van der)

提示:正则表达式看起来像是从外太空,但是regex101.com到救援!