Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Regex Perl MongoDB API-过滤器中的正则表达式_Regex_Mongodb_Perl - Fatal编程技术网

Regex Perl MongoDB API-过滤器中的正则表达式

Regex Perl MongoDB API-过滤器中的正则表达式,regex,mongodb,perl,Regex,Mongodb,Perl,我正在使用Perl和MongoDB进行工作。我有一个文档集合,其中包含一个大文本字段,我需要能够找到该字段中包含多个字符串的所有行 例如,如果这是一个电影引用数据库,那么一行将具有以下值: 我们必须彻底摧毁Arrakis的所有香料生产。公会和 整个宇宙都依赖香料。能摧毁一件东西的人, 控制一件事 我希望能够将这一行与术语“香料”、“阿拉基斯”和“公会”相匹配,所有这些术语都必须出现在文本中 我目前的方法只能在提供的条款顺序正确的情况下实现匹配,即: $db->get_collection(

我正在使用Perl和MongoDB进行工作。我有一个文档集合,其中包含一个大文本字段,我需要能够找到该字段中包含多个字符串的所有行

例如,如果这是一个电影引用数据库,那么一行将具有以下值:

我们必须彻底摧毁Arrakis的所有香料生产。公会和 整个宇宙都依赖香料。能摧毁一件东西的人, 控制一件事

我希望能够将这一行与术语“香料”、“阿拉基斯”和“公会”相匹配,所有这些术语都必须出现在文本中

我目前的方法只能在提供的条款顺序正确的情况下实现匹配,即:

$db->get_collection( 'quotes' )->find( { quote => qr/spice.*Arrakis.*Guild/i } );
这是一场比赛,但是

$db->get_collection( 'quotes' )->find( { quote => qr/Guild.*spice.*Arrakis/i } );
这不是一场比赛

如果我使用SQL数据库,我可以:

... WHERE quote LIKE '%spice%' and quote LIKE '%Arrakis%' and quote LIKE '%Guild%'
但是使用MongoDB接口,每个字段只能获得一次机会


有没有一种方法可以匹配一个正则表达式中需要所有字符的多个单词,或者有没有另一种方法可以在MongoDB接口的一个字段中获得多个裂纹?

一种方法:一组积极的前瞻性断言:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
my @tests = ("The Guild demands that the spice must flow from Arrakis",
             "House Atreides will be transported to Arrakis by the Guild.");
for my $test (@tests) {
  if ($test =~ m/^(?=.*spice)
                  (?=.*Guild)
                  (?=.*Arrakis)/x) {
    say "$test: matches";
  } else {
    say "$test: fails";
  }
}
产生:

公会要求香料必须来自Arrakis:火柴

莱托公爵将被公会运送到阿拉基斯