Составил вот такое выражение:
/(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:watch\?(?:[\w-=&]*&)?v=|(?:embed|v)\/))([\w-]+)[\w-=&#]*/
1) Всё ли учел или еще что-то подправить?
2) Это нужно для замены ссылки на iframe, и как лучше заменять: до внесения в базу или каждый раз при выводе? Учитывая то, что пользователь может менять текст сообщения, то есть если сразу заменять, то при редактировании нужно делать обратную замену, но редактирование реже выполняется, чем вывод.