У меня есть множество видеоданных:
<object width="560" height="315"><param name="movie"
value="http://www.youtube.com/v/2rwPGGdB1_4?version=3&hl=uk_UA&rel=0">
</param><param name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/2rwPGGdB1_4?version=3&hl=uk_UA&rel=0"
type="application/x-shockwave-flash" width="560" height="315"
allowscriptaccess="always" allowfullscreen="true"></embed></object>
Я хочу выбрать и экспортировать идентификаторы из этого набора информации, так как новый сайт исключает только идентификаторы. Поэтому мне нужно как-то захватить часть между v/и?. Как это сделать в SQL-запросе?
Я нашел свое решение в MySql. Во-первых, я нашел индекс '/v/' с SELECT exvid_code, LOCATE('/v/', exvid_code), LOCATE('?', exvid_code) FROM
exvid
После этого я выполнил подстроку, чтобы захватить id:
SELECT SUBSTRING(exvid_code, 83,10) AS id FROM 'exvid'
Вы не можете сделать это с помощью чистого MySQL. REGEXP работает только как фильтр и, таким образом, возвращает 0 или 1, не предоставляя доступ к группе захвата.
Решения включают либо пользовательскую функцию, либо использование другой СУБД, если вы хотите сделать это строго в SQL. Как заменить регулярное выражение в MySQL?
Если вы можете использовать любой скриптовый или скомпилированный язык, что-то вроде
'<object width="560" height="315"><param name="movie" value="http://www.youtube.com/v/2rwPGGdB1_4?version=3&hl=uk_UA&rel=0"> </param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/2rwPGGdB1_4?version=3&hl=uk_UA&rel=0" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>'.match(/youtube\.com\/v\/([^?]+)?/);
должен сделать трюк и, если совместим с PCRE, вернет идентификатор видео во второй группе захвата.