0

我想在 solr 中运行以下正则表达式查询name:/.+\.m+d$/。我的索引中有具有以下名称的文档:

readme.md
2013.02.26.md
test.mmd

他们都不匹配。删除$匹配的readme.md条目。我相信问题是我需要指定一个全局模式修饰符,但找不到执行此操作的语法。

4

2 回答 2

2

这些是我基于对 Solr 正则表达式匹配进行试验的观察结果:

  • 对正则表达式中的所有特殊字符进行HTML 百分比编码该站点有助于手动进行百分比编码。

  • 如果要匹配整个值,请确保对字符串字段进行正则表达式匹配。文本字段上的正则表达式匹配将涉及标记化,并将根据索引期间生成的标记进行工作。

  • 对于 solr 正则表达式,不要指定起始锚点^或结束锚点$,因为它始终假定您匹配整个字符串。除非您在开头或结尾指定.*or (或某些此类正则表达式),否则它始终与开头和结尾匹配。.+^$

我刚刚在字符串字段中索引了您问题中的 3 个值并发出了此查询,它匹配所有 3 个文档:

q=id:/.%2B%5C.m%2Bd/

的 PCRE.%2B%5C.m%2Bd.+\.m+d$

于 2013-02-27T15:56:14.697 回答
0

我在 Reg exp buddy 中试过这个。IT 与您的测试相匹配。

.+\.m+d

用于遍历字符串中所有匹配项的 php (Preg) 语法。

preg_match_all('/.+\.m+d/', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}

这是如果 ^$ 在换行符处匹配并且点匹配新行并且不区分大小写

preg_match_all('/.+\.m+d/sim', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}
于 2013-02-27T15:28:19.277 回答