我想在 solr 中运行以下正则表达式查询name:/.+\.m+d$/
。我的索引中有具有以下名称的文档:
readme.md
2013.02.26.md
test.mmd
他们都不匹配。删除$
匹配的readme.md条目。我相信问题是我需要指定一个全局模式修饰符,但找不到执行此操作的语法。
我想在 solr 中运行以下正则表达式查询name:/.+\.m+d$/
。我的索引中有具有以下名称的文档:
readme.md
2013.02.26.md
test.mmd
他们都不匹配。删除$
匹配的readme.md条目。我相信问题是我需要指定一个全局模式修饰符,但找不到执行此操作的语法。
这些是我基于对 Solr 正则表达式匹配进行试验的观察结果:
对正则表达式中的所有特殊字符进行HTML 百分比编码。该站点有助于手动进行百分比编码。
如果要匹配整个值,请确保对字符串字段进行正则表达式匹配。文本字段上的正则表达式匹配将涉及标记化,并将根据索引期间生成的标记进行工作。
对于 solr 正则表达式,不要指定起始锚点^
或结束锚点$
,因为它始终假定您匹配整个字符串。除非您在开头或结尾指定.*
or (或某些此类正则表达式),否则它始终与开头和结尾匹配。.+
^
$
我刚刚在字符串字段中索引了您问题中的 3 个值并发出了此查询,它匹配所有 3 个文档:
q=id:/.%2B%5C.m%2Bd/
的 PCRE.%2B%5C.m%2Bd
是.+\.m+d$
。
我在 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];
}