Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证正则表达式:确保它至少匹配两个字符_Java_Android_Regex - Fatal编程技术网

Java 验证正则表达式:确保它至少匹配两个字符

Java 验证正则表达式:确保它至少匹配两个字符,java,android,regex,Java,Android,Regex,我正在开发一个Android应用程序,它允许用户输入正则表达式。我将使用正则表达式来查询数据库(),但我不想列出一个庞大的列表(例如,如果用户搜索“.”以获得存在的每个MtG卡的每个版本) 任何魔术卡的最短名称都是“Ow”,因此我需要允许搜索两个字符长(例如,^Ow$)。我希望能够验证输入到文本字段中的正则表达式,以确保在我进行查询时,它将至少匹配两个字符。例如,搜索“Ac”可以,搜索“A”则不行。“[A-D][e-g]+”很好,[F-M]*”不好 最好的办法是什么?我在考虑迭代输入,对每个保证

我正在开发一个Android应用程序,它允许用户输入正则表达式。我将使用正则表达式来查询数据库(),但我不想列出一个庞大的列表(例如,如果用户搜索“.”以获得存在的每个MtG卡的每个版本)

任何魔术卡的最短名称都是“Ow”,因此我需要允许搜索两个字符长(例如,
^Ow$
)。我希望能够验证输入到文本字段中的正则表达式,以确保在我进行查询时,它将至少匹配两个字符。例如,搜索“
Ac
”可以,搜索“
A
”则不行。“
[A-D][e-g]+
”很好,
[F-M]*
”不好

最好的办法是什么?我在考虑迭代输入,对每个保证匹配字符的正则表达式段(单个字符、字符类和捕获组,或者后面跟
+
{n,m}
)计算+1,对可能不匹配的段计算+0(字符、字符类和捕获组后跟
*
{0,n}


这个解决方案行得通吗?还有更好的方法吗?这是浪费时间吗,因为大多数用户只需键入他们面前的一张卡片的部分或全部名称?

这里有一个非常简单的蛮力方法,如果给你一个正则表达式,请将它与所有字母数字字符(1乘1)进行比较如果它匹配任何字符,那么它就不符合您的最小长度标准。

这里有一个非常简单的蛮力方法,如果给您一个正则表达式,将它与所有字母数字字符(1乘1)进行比较,如果它匹配任何字符,那么它就不符合您的最小长度标准。

您最好将用户输入视为文字,但使用“通配符”字符(例如,
*
),这样他们就不必担心正则表达式的细节,也不必直接解决这个问题


例如,您的用户可以输入“
力量*
”,它将与“意志力”、“自然力”匹配“,等等。这样,您就可以接受他们的输入,并用
*
替换
\*
,使用您构建的正则表达式,而不用担心清理他们的输入。

您最好将用户输入视为文本,但使用“通配符”(例如
*
)这样他们就不必担心正则表达式的细节,也不必直接解决这个问题


例如,您的用户可以输入“
力量*
”,它将匹配“意志力”、“自然力”,等等。通过这种方式,您只需接受他们的输入,并用
*
替换
\*
,然后使用您构建的正则表达式,而不用担心清理他们的输入。

我想您可能想尝试解决“结果太多”这一更普遍的问题取而代之的是。找到一种方法来设置一个截止值,或者按块排序,或者只是提示用户,告诉他们需要更具体一些,等等。问题不在于显示很多结果,而是为了大量查询而对MOTL数据库进行夯实,然后将结果下载到移动设备上。我只能通过网络访问MOTL价目表,所以我不能简单地使用SQL限制或类似的东西。用户尝试的每个搜索实际上也是两个查询,因为箔卡和非箔卡是分开的。我认为您可能需要尝试解决“结果太多”这一更普遍的问题取而代之的是。找到一种方法来设置一个截止值,或者按块排序,或者只是提示用户,告诉他们需要更具体一些,等等。问题不在于显示很多结果,而是为了大量查询而对MOTL数据库进行夯实,然后将结果下载到移动设备上。我只能通过网络访问MOTL价目表,所以我不能简单地使用SQL限制或类似的东西。用户尝试的每个搜索实际上也是两个查询,因为箔卡和非箔卡是分开的。我喜欢这个想法,但如果我走这条路,我仍然希望允许使用正则表达式作为选项。无论我做什么,MOTL搜索都将是正则表达式,因此,既然它在那里,我希望它可用我喜欢这个想法,但如果我走这条路线,我仍然希望允许regex作为一个选项。无论我做什么,MOTL搜索都将是regex,因此,既然它在那里,我想让用户可以使用它。