Как использовать regex для поиска назад эффективно?

Поскольку Stage является обязательным , все отношения «один ко многим», в которых задействован Stage, будут иметь каскадное удаление по умолчанию. Это означает, что если вы удалите объект Stage

  • , удаление будет каскадом непосредственно на Side
  • , удаление будет каскадом непосредственно на Card и потому что Card и Side имеют обязательные отношения один-ко-многим с каскадным удалением, включенным по умолчанию, затем он будет каскадом от Card до Side

Итак, у вас есть два каскадных удалить пути из Stage в Side - что вызывает исключение.

Вы должны либо сделать Stage необязательным, по крайней мере, в одном из объектов (т. е. удалить атрибут [Required] из Stage) или отключить каскадное удаление с помощью Fluent API (невозможно с аннотациями данных):

modelBuilder.Entity<Card>()
    .HasRequired(c => c.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);

modelBuilder.Entity<Side>()
    .HasRequired(s => s.Stage)
    .WithMany()
    .WillCascadeOnDelete(false);
14
задан Lii 25 April 2016 в 20:37
поделиться

2 ответа

Механизм регулярных выражений Java не может искать в обратном направлении. Фактически, единственный известный мне механизм regex, который может это делать, - это механизм в .NET.

Вместо поиска назад, выполните итерацию по всем совпадениям в цикле (поиск вперед). Если совпадение находится до нужной вам позиции, запомните его. Если совпадение находится после нужной позиции, выйдите из цикла. В псевдокоде (мой Java немного заржавел):

storedmatch = ""
while matcher.find {
  if matcher.end < offset {
    storedmatch = matcher.group()
  } else {
    return storedmatch
  }
}
9
ответ дан 1 December 2019 в 14:11
поделиться

Является ли строка поиска строго регулярным выражением (полный, богатый синтаксис?) Потому что, если нет, for (int j = line; j> = 0; j--) , перевернуть строку, перевернуть совпадение и поиск вперед;)

0
ответ дан 1 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: