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
elasticsearch regexp don';行不通_Regex_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Regex,elasticsearch" /> elasticsearch,Regex,elasticsearch" />

elasticsearch regexp don';行不通

elasticsearch regexp don';行不通,regex,elasticsearch,Regex,elasticsearch,我需要在elasticsearch上做一个regexp来过滤一些数据。 我筛选的字段是人名。数据的格式并不总是很好(有时没有名字,有时姓氏后面跟着句点或逗号或“逗号+名字”或“点+名字”…) 例如,使用“bouchard”可以获得以下匹配: "bouchard", "bouchard, m.", "bouchard, j.", "bouchard j.p.", "bouchard. j.p." 我还需要排除以“bouchardat”等相同前缀开头的名称 我尝试了许多正则表达式,最后发现排除可

我需要在elasticsearch上做一个regexp来过滤一些数据。 我筛选的字段是人名。数据的格式并不总是很好(有时没有名字,有时姓氏后面跟着句点或逗号或“逗号+名字”或“点+名字”…)

例如,使用“bouchard”可以获得以下匹配:

 "bouchard", "bouchard, m.", "bouchard, j.", "bouchard j.p.", "bouchard. j.p."
我还需要排除以“bouchardat”等相同前缀开头的名称

我尝试了许多正则表达式,最后发现排除可能会产生更好的结果:

   "query" :  { "regexp" : {
                    "RECORDEDBY" : "bouchard([^a-z].*)"
    }}
这不起作用,因为它返回“bouchard,m.”、“bouchard,j.”、“bouchard j.p.”,但不返回“bouchard.j.p.”,也不返回“bouchard”

我尝试了一些带有+和。*的正则表达式,但它们不起作用

( "bouchard([^a-z].*.*)" "bouchard([^a-z]*+.*)")
为了明确起见,我想允许:

bouchard
bouchard, m.
bouchard, j.
bouchard j.p.
bouchard. j.p.
我想排除在外

bouchardat

欢迎提供任何建议。

在这种情况下,如果您要查找的单词后面没有诸如“
”、“
”或“
”、
”之类的特殊字符,则可以使用a来排除每个
[a-z]
后缀:

((bouchard)+?([ .,]+)[ ,.a-zA-Z]*)|(bouchard[^a-zA-Z]?)
此regexp返回条件(必须有
[,]+
):

并忽略管道
|
后的内容,其中不适用
[,]+

bouchardat

您能更具体一点吗?您允许哪些条目,哪些条目不允许?文档中说Elasticsearch正则表达式总是锚定的,因此
“RECORDEDBY”:“bouchard”
只允许
bouchard
,而
“RECORDEDBY”:“bouchard.+”
应该允许任何以
bouchard
开头的值。抱歉。我想排除“bouchardat”并允许“bouchard”、“bouchard,m.”、“bouchard,j.”、“bouchard j.p.”、“bouchard.j.p.”以及所有名称相同、后跟空格/点/coma和任何单词的条目。然后,尝试使用
bouchard[^a-zA-Z]*
bouchard[^a-zA-Z]*只返回“bouchard”,而不返回“bouchard,m.”、“bouchard,j.”,“bouchard j.p.”,“bouchard j.p.”“bouchard[^a-zA-Z]*.*返回“bouchard”,“bouchard,m.”,“bouchard,j.”,“bouchard j.p.”,“bouchard j.p.”,“bouchard j.p.”,“bouchardat”。它错过了“bouchard.j.p.”并允许使用“bouchardat”,感谢您解释的解决方案。不幸的是,它没有返回“bouchard”“。字符逗号、空格和点不需要转义?当然,
结尾处缺少。更新并添加了reges101链接。当然,您希望捕获整个组,所以再次更新。非常感谢。也感谢Regex101站点。
(bouchard+[^a-zA-Z]?)
这一个将匹配boucharddddddd(d的内码数)。我根本看不出d之后出现此
+
的原因
bouchardat