我正在开发一款允许用户输入正则表达式的Android应用。我将使用正则表达式来查询数据库(MOTL),但我不想删除一个巨大的列表(例如,如果用户搜索“。”以获取每个MtG的每个版本卡存在)。
任何魔术卡的最短名称是“Ow”,因此我需要允许搜索两个字符长(例如,“^Ow$
”)。我希望能够验证输入到文本字段中的正则表达式,以确保在我进行查询后,它将匹配至少两个字符。例如,搜索“Ac
”很好,搜索“A
”则不行。 “[A-D][e-g]+
”很好,“[F-M]*
”不是。
最好的方法是什么?我正在考虑迭代输入,为每个正则表达式保证匹配一个字符(单个字符,字符类和捕获组,或者+
或{n,m}
后面的那个)计数+1 ,+ 0表示可能与某些内容不匹配的字段(字符,字符类和捕获组后跟*
或{0,n}
)。
该解决方案有效吗?有没有更好的方法?这是浪费时间,因为大多数用户只需键入位于他们面前的卡片的部分或全部名称?
答案 0 :(得分:1)
您可能最好将用户输入视为文字,但使用“通配符”字符(例如*
),以便他们不必担心正则表达式的详细信息而您没有直接解决这个问题!
例如,您的用户可以输入“force of *
”,它会匹配“意志力”,“自然之力”等。这样您就可以接受他们的输入并替换\*
使用.*
并使用你构建的正则表达式,而不是担心清理他们的输入。
答案 1 :(得分:0)
这是一种非常天真的蛮力方法,如果给你一个正则表达式将它与所有字母数字字符(1乘1)进行比较,如果它匹配任何它不符合你的最小长度标准。