Вы не даете достаточно подробностей. Поскольку ваше первое выражение работает, я предполагаю, что вы используете режим Singleline
.
Следующее мое предположение состоит в том, что эта строка является частью большей строки.
^
соответствует начало строки по умолчанию
$
по умолчанию соответствует концу строки.
Теперь, поскольку ваша строка содержит материал до и после, вам нужно изменить это поведение по умолчанию:
С модификатором Multiline
, ^
соответствует началу строки, а $
- концу строки. Дополнительную информацию см. В документации .
Итак, ваше регулярное выражение должно выглядеть примерно так:
Regex regx = new Regex("(?<=^(\s*Owner))(.|\n)*?(?=\s*Information$)", RegexOptions.Singleline | RegexOptions.Multiline);
Поскольку никто не мог ответить мне до того, как я получу свой собственный ответ, я пишу код здесь для людей, которые могут наткнуться на ту же проблему.
Основная проблема заключалась в том, что я использовал функцию table () в подзапросе. Лучшим решением было использовать функцию from ().
Фрагмент кода from(with(new CalenderShare)->getTable())
предоставил бы мне имя таблицы модели CalenderShare.
Calender::where('user_id', $user_id)
->orWhereIn('id', function($query) use ($user_email) {
$query->from(with(new CalenderShare)->getTable())
->select('calender_shares.calender_id')
->where('calender_shares.shared_with', $user_email);
})->get();
Вы можете попробовать
$records = Calender::where('user_id', $user_id)
->orWhere('id', function($query) use ($user_email) {
$query->select('calender_id')
->from('calender_shares')
->where('shared_with', $user_email);
})->get();