Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex_Search - Fatal编程技术网

Java搜索模式正则表达式样式

Java搜索模式正则表达式样式,java,regex,search,Java,Regex,Search,我的问题如下: Java中是否有一个模式生成器,可以为其提供输入并构建搜索/正则表达式模式? 示例: 我所拥有的: 加载名称列表。 开始读取文件,并用完整的名称列表检查每一行。(这会创建笛卡尔积,但我不希望这样) 我想要实现的目标: 加载正则表达式应考虑的名称列表 创建模式并将所有名称加载到模式中。 读取第一个文件并用模式检查它 你可以看到,我想把笛卡尔积减少到一个O[n]序列,以节省性能 条件: 正则表达式模式应该从列表中加载,因此它将是动态的。 输入可以是任何内容,输出应该是一个警报,以防任

我的问题如下:

Java中是否有一个模式生成器,可以为其提供输入并构建搜索/正则表达式模式?

示例:

我所拥有的: 加载名称列表。 开始读取文件,并用完整的名称列表检查每一行。(这会创建笛卡尔积,但我不希望这样)

我想要实现的目标: 加载正则表达式应考虑的名称列表 创建模式并将所有名称加载到模式中。 读取第一个文件并用模式检查它

你可以看到,我想把笛卡尔积减少到一个O[n]序列,以节省性能

条件:
正则表达式模式应该从列表中加载,因此它将是动态的。
输入可以是任何内容,输出应该是一个警报,以防任何名称匹配


如果您认为我提供的信息不够,请询问,我很乐意尽可能提供更多信息。

您可以做的是创建一个包含名称的集合。这将保证您拥有具有O(1)访问时间的不同名称列表。然后,您可以检查文件中第行的名称是否存在于该集合中


但这可能不是完美的解决方案。要获得更多帮助,您应该提供文件预览和示例输入输出

您可以做的是创建一个具有名称的集合。这将保证您拥有具有O(1)访问时间的不同名称列表。然后,您可以检查文件中第行的名称是否存在于该集合中


但这可能不是完美的解决方案。要获得更多帮助,您应该提供文件预览和示例输入输出

不幸的是dasblinkenlight在评论中给出了答案


编译如此庞大的模式的结果是可以的,我用4.5MB的模式进行了尝试。我希望没有限制。

不幸的是,dasblinkenlight在评论中给出了答案


编译如此庞大的模式的结果是可以的,我用4.5MB的模式进行了尝试。我希望没有限制。

命名1 |命名2 |命名3 | |命名模式有什么问题?除非名称包含元字符,否则您不需要对其进行任何特殊处理。@dasblinkenlight让我们假设我们有200000个名称,而我每行大约需要运行200000次regexp。将200000个项目添加到regexp模式不会生成一个包含200000个regexp搜索项目的列表。compile方法使您的模式成为一个有限状态机,允许您相对快速地从列表中搜索任何一个名称。不过编译过程可能需要一些时间。@dasblinkenlight还有一点,我希望regexp是动态的,我从文件中获取列表,因此它将无法编译到程序中,这必须在晚上发生runtime@OliverStutzregexp不是在编译时编译的,而是在运行时编译的,
name1 | name2 | name3 |……| nameN
模式有什么问题?除非名称包含元字符,否则您不需要对其进行任何特殊处理。@dasblinkenlight让我们假设我们有200000个名称,而我每行大约需要运行200000次regexp。将200000个项目添加到regexp模式不会生成一个包含200000个regexp搜索项目的列表。compile方法使您的模式成为一个有限状态机,允许您相对快速地从列表中搜索任何一个名称。不过编译过程可能需要一些时间。@dasblinkenlight还有一点,我希望regexp是动态的,我从文件中获取列表,因此它将无法编译到程序中,它必须在runtime@OliverStutzregexp不是在编译时编译的,但在运行时我没有示例输入和输出,其目的是要有某种类型的regexp模式,其中包含多达1百万条记录,我可以像regexp语法一样使用它来扫描每一行,如果该行包含列出的名称,它应该中止。它就像一个警报机制,如果文件包含列表中的任何名称,我没有一个示例输入和输出,目的是有某种regexp模式,其中包含多达1百万条记录,我可以使用regexp语法来扫描每一行,如果该行包含列出的名称,它应该中止。如果文件包含列表中的任何名称,它就像一个警报机制