【发布时间】:2014-04-04 15:48:56
【问题描述】:
我有这样的表达方式:
'/^([\p{L}\p{Mn}\p{Pd}\'\x{2019}]+|\d+)(\s+([\p{L}\p{Mn}\p{Pd}\'\x{2019}]+|\d+))*$/u'
目标是匹配名称和数字,如“6 de diciembre”或“Mariana de Jesús”(使用数字和 unicode 字符。
问题是它还匹配诸如“6de diciembre”[1] 之类的拼写错误。 不允许在同一个单词中混用数字和字母(不,在这种情况下我们没有像“6th”这样的表达方式)。
问题:我应该使用哪些字符类?我需要数字和这些 unicode 字母,但不能混合,不能连接。
注意:我之前发布过一个关于这个主题的类似问题,但问题略有不同,不能期待相同的答案。
[1] 我不敢相信我必须澄清这一点:不应匹配错别字 - 除非明确说明,否则正则表达式是在字符串中查找预期的常规格式
【问题讨论】:
-
如果您的输入不规则(例如随机/任意),那么您将很难使用正则表达式来匹配该随机性...
-
我没有说这是随机的。我说它是一个名字,并给了你例子和解释:术语用空格分隔,并且只是数字或(unicode letters|punct.symbols|hyphen)。听起来一点也不随意。
-
当然不能匹配错别字。这就是正则表达式的用途。
-
实际阅读这个问题应该会让你得出这样的结论:1. 匹配的拼写错误是一个意想不到的问题(我说的是“问题”并用现在简单的方式解释),2. 举例说明我需要做什么匹配。 3. 用粗体文字解释我不应该匹配的内容。 4. 要求一组字符类告诉“需要数字和这些 unicode 字母,但不能混合,不能连接”。