0

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

这是我找到的,但与我在城市名称中可能遇到的所有不同和可能的字符不匹配:

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

4 回答 4

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) 将匹配。

于 2013-09-17T13:37:25.843 回答
0

您可以反转您的模式...以匹配您将使用的不是“a-Z09-_”的所有内容

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

字符类中的 ^ 将其反转。

于 2013-09-17T13:41:14.343 回答
0

使用 unicode 属性:

\pL代表任何字母

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

preg_match('/\s*[\pL-\s]/u', $string);
于 2013-09-17T13:40:19.770 回答
0

我遇到了同样的问题,我想拆分还包含特殊字符的名称部分:

例如,如果您想拆分一堆包含以下内容的名称:

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

fornames 和 suffix 用 (white)space(s)
分隔,首字母用 . 分隔。最多有 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来救援!

于 2017-03-27T21:32:56.780 回答