我正在寻找一种方法来匹配字符串中所有可能的特殊字符。我有一个世界上的城市列表,这些城市的许多名称都包含特殊字符和重音字符。所以我正在寻找一个正则表达式,它将为任何类型的特殊字符返回 TRUE。我找到的所有字符都只匹配一些,但我需要为每个可能的特殊字符提供一个,包括字符串开头的空格。这可能吗?
这是我找到的那个,但与我在城市名称中可能遇到的所有不同和可能的字符不匹配:
preg_match('/[#$%^&*()+='-'[']'';,.'/{}|":<>?~'''']/', $string);
您将需要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) 将匹配。
使用 unicode 属性:
'pL
代表任何字母
为了匹配城市名称,我会这样做(我想-
和空格是有效的字符):
preg_match('/'s*['pL-'s]/u', $string);
你可以反转你的模式...匹配您将使用的非"a-Z09-_"的所有内容
preg_match('/[^-_a-z0-9.]/iu', $string);
字符类中的 ^ 将其反转。
我遇到了同样的问题,我想拆分也包含特殊字符的命名空间:
例如,如果要拆分包含以下内容的一组名称:
<lastname>,<forename(s)> <initial(s)> <suffix(es)>
前缀和后缀用(空白)空格
分隔首字母缩写用 .最多 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 救援!