Нераспознанный побег персонажа '-' |ElasticSearch - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать регулярное выражение с условием: «Или maslo до пробела, тире или конца строки, или начиная с mas, а затем любой символ от одного до бесконечности, кроме пробела или тире».

{
  "regexp": {
    "name": {
      "value": "(maslo( |-|$)|mas[^ \-]+)"
    }
  }
}

Это выражение [^ \-] должно быть правильным в соответствии с Документация запроса Regexp , параграф "Классы символов", последняя строка, в которой написано:

[^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]"
}

Я что-то упустил?Спасибо за любой совет.

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете поставить дефис в начале класса персонажа, чтобы избежать необходимости экранировать его в регулярном выражении ES:

"(maslo([- ]|$)|mas[^- ]+)"
         ^           ^

Иначе, вам нужно будет использовать двойные обратные слэши, так как один используется для определения регулярных escape-строк, а буквальный обратный слэш - escape-выражение - формируется с использованием двух последовательных обратных наклонных черт.

В документации ES regex в примерах используется только одна обратная косая черта, потому что эти шаблоны написаны в своих литеральных формах, а не в виде строковых литералов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...