RegexStringComparator BigTable, соответствующий двоичному числу

В BigTable при использовании RegexStringComparator возможно ли сопоставить число в двоичном формате. Например, предположим, что ключ строки содержит число, но для экономии места и обеспечения предсказуемой длины это число сохраняется как 4-байтовое значение, а не как отдельный символ для каждой печатной цифры. Можно ли использовать RegexStringComparator для сопоставления числа?

В частности, допустим, я хочу сопоставить любое из двух целых чисел A или B, тогда регулярное выражение может выглядеть так...

.*(A|B)

Чтобы быть более конкретным, скажем, что A = 284281344, что равно 0x10f1ca00.

.*((\\x10\\xf1\x\xca\\x00 | B)

Я обнаружил, что это кажется невозможным из-за байтов с более высоким значением (возможно, не-ascii), таких как 0xF1, которые не совпадают.

Любые рекомендации или мысли?


person Paul Mazzuca    schedule 18.09.2017    source источник
comment
Тем не менее, я все еще исследую проблему, и я считаю, что проблема уникальна для эмулятора, поскольку в документации указано, что регулярные выражения должны содержать только допустимые символы UTF-8, в отличие от реальной службы Cloud Bigtable, которая может обрабатывать регулярные выражения как произвольные байты.   -  person Paul Mazzuca    schedule 22.09.2017


Ответы (1)


Можете ли вы попробовать использовать escape-последовательность \C (соответствует одному байту даже в режиме UTF-8)? Bigtable использует вариант регулярного выражения re2, как описано здесь: https://github.com/google/re2/wiki/Syntax

person Igor Bernstein    schedule 20.09.2017
comment
Да, я знаю о re2, и на самом деле это была моя первая мысль, однако всякий раз, когда я пытаюсь использовать \C Filter filter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("\\C"));, я получаю PatternSyntaxException - person Paul Mazzuca; 21.09.2017