【发布时间】:2009-09-30 04:35:53
【问题描述】:
我需要检查给定的字符串是否部分匹配给定的正则表达式。例如,对于正则表达式ab[0-9]c,字符串“a”、“ab”、“ab3”和“b3c”会“匹配”,但不会匹配字符串“d”、“abc”或“a3c”。我一直在做的是笨重的a(?:b(?:[0-9](?:c)?)?)?(它只适用于一些部分匹配,特别是那些“开始”匹配的),但由于这是 API 的一部分,我宁愿给用户一个输入匹配正则表达式的更直观的方式。
如果描述不是很清楚(我意识到可能不是!),这将用于验证文本框上的文本输入。我想防止任何会导致无效字符串的编辑,但我不能只将字符串与常规正则表达式匹配,因为在完全输入之前,它不会匹配。例如,使用上面的正则表达式 (ab[0-9]c),当我尝试输入 'a' 时,它是不允许的,因为字符串 "a" 与正则表达式不匹配。
基本上,它是一种反向startsWith(),适用于正则表达式。 (new Pattern("ab[0-9]c").startsWith("ab3") 应该返回 true。)
有什么想法吗?
【问题讨论】:
-
仅供参考:
a(?:b(?:[0-9](?:c)?)?)?将匹配包含“a”的任何字符串,例如“jazz”。您想使用^a(?:b(?:[0-9](?:c)?)?)?$以便匹配整个字符串。 -
客户端使用的所有正则表达式是否都像
ab[0-9]c一样简单,还是需要更复杂的匹配(即使用子组)? -
糟糕...是的,^ 和 $ 会自动添加到正则表达式中,这就是为什么我忽略添加它们的原因,谢谢。不,正则表达式并不是那么简单,它们可能会变得非常复杂,尽管不需要子组。