Иногда с помощью персонажей, которые вы указали, возможно простое экранирование. Например, использование обратной косой черты для выхода из скобки не будет работать в левой части строки подстановки в sed, а именно
sed -e 's/foo\(bar/something_else/'
. Я просто использую простое определение класса символов вместо , поэтому вышеприведенное выражение становится
sed -e 's/foo[(]bar/something_else/'
, которое я нахожу для большинства реализаций регекса.
BTW Классы символов являются довольно ванильными элементами регулярного выражения, поэтому они, как правило, работают в большинстве ситуаций, когда вы нужны экранированные символы в регулярных выражениях.
Изменить: после комментария ниже, просто подумал, что я бы упомянул о том, что вам также нужно учитывать разницу между автоматами конечного состояния и автоматами не конечного состояния при просмотре поведение оценки regexp.
Возможно, вам захочется взглянуть на «блестящую книгу с шаром», а также на эффективную Perl ( санированную ссылку Amazon ), в частности главу о регулярных выражениях, чтобы получить почувствуйте тогда разницу в типах оценки двигателя regexp.
Не все в мире PCRE!
В любом случае, регулярные выражения настолько неуклюжи по сравнению с SNOBOL ! Теперь это был интересный курс программирования! Наряду с тем, что на Simula .
Ах, радости изучения в UNSW в конце 70-х! (-:
Вы должны быть в состоянии сделать это, используя Script Query . Это позволило бы вам создать объект даты, используя значения полей, а затем сравнить эту дату с текущей датой.
Условный пример
{
"query": {
"bool" : {
"filter" : {
"script" : {
"script" : {
"params": {
"monthRange": 6
},
"source": """
def today = new Date();
def timestamp = new Date(doc['timestamp']['year'].value, doc['timestamp']['monthValue'].value, doc['timestamp']['dayValue'].value);
/* Date comparison magic (I don't know Java, so you're on your own here) */
/* return result of comparison */
""",
"lang": "painless"
}
}
}
}
}
}
Я использовал Безболезненно только один раз, поэтому я недостаточно знаком, чтобы дать идеальный ответ. Но это может помочь вам начать. Если вы застряли, просто задайте другой вопрос, относящийся к вашей проблеме, и тот, кто более знаком с Java / Painless, может вам помочь.