【发布时间】:2015-03-12 17:56:20
【问题描述】:
大家好,我需要制作一个符合以下要求的正则表达式:
字母数字 可以包含任何有效的 Unicode 字符,包括空格或标点符号,但我们不应允许前导或尾随空格。
^[\\p{S}\\p{L}\\d\\p{P}][\\p{L}\\d\\p{P} ]{4,18}[\\p{L}\\d\\p{P}]$
现在我正在使用这个,但对于某些 unicode 字符无法正常工作,例如:§
我不是正则表达式的专家,所以我寻求帮助,谢谢。
【问题讨论】:
-
您需要定义“任何有效的 Unicode 字符”。您是否希望避免使用 Unicode 非字符代码点?您是否试图避免孤儿代理人?或者“任何”是否真的意味着属于您未指定的几个特定字符类别之一的字符?
-
任何有效的 unicode 字符表示 unicode 表中的每个字符。
-
重点是 Java
Strings 已经包含以 UTF-16 编码的 Unicode 文本。不在 Unicode 代理代码点范围内的 Javachars 都是有效的 Unicode 字符。代理对也对应于 Unicode 代码点,尽管此类代码点的大空间没有分配给它们的字符。 -
没有单一的 Unicode 表。那么你的意思是Unicode映射一个字符的代码点吗?您的意思是包括明确指定不对应于任何字符的列表代码点?您是否需要考虑 BMP 之外的字符,这些字符将在 Java 中表示为代理对?
-
当你说前导和尾随空格不能出现时,看起来你可能意味着 Unicode 认为空格的字符,而不是文字空格字符,或者 Java 考虑空格。那么它是什么?