我正在尝试解析一个字符串,将其拆分为不是字母或数字的内容
$parse_query_arguments = preg_split("/[^a-z0-9]+/i", 'København');
并构造一个mysql查询。即使我跳过 preg_split 并尝试直接输入字符串,它也会将其分成 2 个不同的字符串,“K”和“benhavn”。
我该如何处理这些问题?
我正在尝试解析一个字符串,将其拆分为不是字母或数字的内容
$parse_query_arguments = preg_split("/[^a-z0-9]+/i", 'København');
并构造一个mysql查询。即使我跳过 preg_split 并尝试直接输入字符串,它也会将其分成 2 个不同的字符串,“K”和“benhavn”。
我该如何处理这些问题?
如果您使用的是文字字符,a-z
那么它将与重音字符不匹配。您可能希望使用各种可用的字符类来进行更通用的匹配:
/[[:alpha:][:digit]]/
该[:alpha:]
集合的范围比a-z
. 记住字符匹配是基于字符代码完成的,并且a-z
从字面上看,字符之间a
和z
索引之间的字符。像这样的字符ø
位于此范围之外,即使它们按字母顺序位于该范围之间。
计算机以 ASCII-abetical(UNICODEical?)顺序工作。
这可能有助于解释您的正则表达式中发生了什么... Regex 和 Unicode。
你可以尝试像这个问题\p{L}
中解释的那样