У меня возникли проблемы с созданием регулярного выражения для запроса базы данных, который я делаю. В настоящее время я использую базу данных Accumulo (что не имеет значения в данном пункте). В Accumulo ряд выглядит следующим образом:Создать регулярное выражение на основе переменных
rowid columnfamily : columnqualifier [ ] value
и вы позволили матчу узора на каждом из четырех с итератором. Поэтому, когда у меня возникают проблемы, вы пытаетесь создать шаблон, соответствующий rowid
. Вся строка выглядит следующим образом
2beab7b3-0792-4347-a63b-3e2f3c6b048d.4ce7be2a-fb2e-4694-94db-877a0ed3e68b.edd1918d-9ddc-4597-891a-d12c8c7be602.1445442700588 transaction:occurrences [] @\x18\x00\x00\x00\x00\x00\x00
Где только rowid
я пытаюсь соответствовать выглядит как:
2beab7b3-0792-4347-a63b-3e2f3c6b048d.4ce7be2a-fb2e-4694-94db-877a0ed3e68b.edd1918d-9ddc-4597-891a-d12c8c7be602.1445442700588
Это уникальный ключ, созданный с помощью 3 других ключей (от 3 объекты) и метку времени, которые все разделены .
. Поэтому в основном мы имеем это:
2beab7b3-0792-4347-a63b-3e2f3c6b048d //key 1 for the method below
4ce7be2a-fb2e-4694-94db-877a0ed3e68b //dont care about this key
edd1918d-9ddc-4597-891a-d12c8c7be602 //key 3 for the method below
1445442700588 //dont care about the timestamp
Метод Я работаю с будет что-то вроде этого:
public blah getBlah(String key1, String key3){
//do regex stuff
}
Где key1
это первый раздел большего ключа (как показано выше) и key3
является третья часть большего ключа (также показано выше).
Итак, все это сводится к тому, что я буду знать 2 части составного ключа из четырех частей, которые всегда будут в одной и той же форме, и мне нужно создать регулярное выражение или шаблон, чтобы выяснить, когда первый и третья часть ключа соответствует входам метода getBlah()
.
EDIT
Загвоздка в Accumulo (в этом случае, по крайней мере), что я строю регулярное выражение для запроса в основном. Поэтому, когда вызывается метод getBlah(String k1, String k2)
, я не буду запрашивать базу данных, поэтому я не буду знать весь ключ или даже то, что выглядит строка. Запрос в основном похож на оператор select в этом случае. Таким образом, он пройдет весь стол и посмотрит на @rowid
, где этот шаблон будет совпадать, а затем вытащить все совпадения. Поэтому мне нужно иметь возможность использовать этот метод для динамического соответствия шаблону rowid
s, не зная их заранее.
Таким образом, все rowid
s всегда будут в форме xxxxxxx.xxxxxxx.xxxxxxx.xxxxxxx
, а ключи, которые передаются в метод, всегда будут представлять собой первый и третий набор x.
Великое объяснение о подоплеке вашего вопроса, но и о регулярных выражениях ... что вы пробовали? И почему вы хотите создать регулярное выражение в первую очередь, почему бы вам просто не разделить на. и взять первый и третий элемент результата? (Шаблон String.split также является регулярным выражением, поэтому для вас это будет «\\.») –
Эй. Спасибо за ваш ответ. Я обновил оп, возможно, пока вы вводили ответ, чтобы объяснить, что вы не можете сделать что-то вроде раскола. Вы не знаете весь ключ, прежде чем идти в этот метод. Я пытаюсь создать регулярное выражение в зависимости от того, что передается. В свою очередь, запрос Accumulo, который я создаю, работает как «выбрать из таблицы, где blah = whatever». В зависимости от регулярного выражения результаты будут сбрасываться только в том случае, если они соответствуют шаблону. Я не хочу, чтобы все тянуть, затем сортировать его или, что еще хуже, делать несколько запросов. – erp
Если я могу спросить, какова цель функции getBlah? Если для частого использования некоторых записей используется регулярное выражение, то чрезмерное дорогостоящее использование регулярных выражений, потому что простое количество строк, которое вы должны сканировать. В этом случае рассмотрите использование вторичного (и, возможно, третичного) индекса. Если эта функция редко используется, и у вас есть доступ к кластерам, подумайте об использовании пользовательского итератора фильтра, расширяющего итератор. В противном случае вам просто нужно сканировать и фильтровать результат. – Averman