我正在尝试创建带有以下条件的正则表达式:“或maslo
直到空格,破折号或行尾,或者以mas
开头,然后是从一个字符到无穷大的任何字符(空格或破折号除外) “。
{
"regexp": {
"name": {
"value": "(maslo( |-|$)|mas[^ \-]+)"
}
}
}
根据Regexp Query Documentation最后一行“字符类”段落,该表达式[^ \-]
应该是正确的,
[^abc\-] # any character except '-' or 'a' or 'b' or 'c'
但是我收到错误:
{
"type": "json_parse_exception",
"reason": "Unrecognized character escape '-' (code 45)\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@2a7b147b; line: 8, column: 47]"
}
我想念什么吗?感谢您的任何建议。
答案 0 :(得分:3)
您可以将连字符放在字符类的开头,以避免不得不在ES regex中对其进行转义:
"(maslo([- ]|$)|mas[^- ]+)"
^ ^
否则,您将需要使用双反斜杠,因为使用单个反斜杠定义了常规的字符串转义,而文字反斜杠(即正则表达式转义)是使用两个连续的反斜杠形成的。
在ES regex文档中,示例中仅使用一个反斜杠,因为这些模式以其文字形式而不是字符串文字形式编写。