so, got code:
function pcrt ($input) { if (preg_match('/youtube\.com\/watch\?v=([^\&\?\/]+)/', $input, $id)) { echo '1<pre>'; print_r($id); echo '</pre>'; } else if (preg_match('/youtube\.com\/embed\/([^\&\?\/]+)/', $input, $id)) { echo '2<pre>'; print_r($id); echo '</pre>'; } else if (preg_match('/youtube\.com\/v\/([^\&\?\/]+)/', $input, $id)) { echo '3<pre>'; print_r($id); echo '</pre>'; } else if (preg_match('/youtu\.be\/([^\&\?\/]+)/', $input, $id)) { echo '4<pre>'; print_r($id); echo '</pre>'; } else { return 'no match'; } } echo pcrt(' lorem ipsum dolor sit amet, consectetur adipiscing elit. donec id tristique nisi. praesent dolor nulla, auctor eu consequat quis, molestie non augue. proin fermentum, metus et mattis convallis, lorem nunc posuere justo, sed posuere quam lacus ut felis. vestibulum auctor ante sed eros pulvinar rutrum. sed et pretium nisl. suspendisse sed risus odio. donec eu sodales est, vitae euismod justo. cras tincidunt eros nisl, ac convallis lorem cursus nec. nam malesuada, mi et dictum placerat, nulla nunc auctor dui, in sollicitudin metus purus non felis. nulla lacinia pretium dolor, sit amet egestas lacus vulputate a. integer sagittis libero justo, dignissim aliquet orci aliquet ut. suspendisse est ullamcorper libero vulputate bibendum eu eu massa. phasellus nunc libero, gravida ac aliquet sed, pellentesque vel ipsum. vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; mauris @ mauris aliquam, consectetur nulla ac, tempus tortor. http://youtube.com/v/123456874145 nunc tempor neque sed libero sodales, eu malesuada justo pretium. integer ac dolor sit amet eros volutpat pulvinar. cras pharetra accumsan metus. proin @ risus commodo sapien fermentum ullamcorper. suspendisse ornare varius est, eget condimentum lectus sagittis vitae. curabitur massa nec ligula sodales fringilla. morbi vestibulum rutrum risus. in sit amet turpis ut lacus dapibus posuere sed sit amet metus. phasellus et posuere lacus. vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; maecenas vitae mi sit amet neque pharetra mollis. mauris lorem est, luctus id leo nec, laoreet eleifend augue. sed posuere nisl non nisl congue blandit quis orci. vestibulum sit amet magna sit amet turpis ultricies dictum. '); now problem resulting:
3 array ( [0] => youtube.com/v/123456874145 nunc tempor neque sed libero sodales, eu malesuada justo pretium. integer ac dolor sit amet eros volutpat pulvinar. cras pharetra accumsan metus. proin @ risus commodo sapien fermentum ullamcorper. suspendisse ornare varius est, eget condimentum lectus sagittis vitae. curabitur massa nec ligula sodales fringilla. morbi vestibulum rutrum risus. in sit amet turpis ut lacus dapibus posuere sed sit amet metus. phasellus et posuere lacus. vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; maecenas vitae mi sit amet neque pharetra mollis. mauris lorem est, luctus id leo nec, laoreet eleifend augue. sed posuere nisl non nisl congue blandit quis orci. vestibulum sit amet magna sit amet turpis ultricies dictum. [1] => 123456874145 nunc tempor neque sed libero sodales, eu malesuada justo pretium. integer ac dolor sit amet eros volutpat pulvinar. cras pharetra accumsan metus. proin @ risus commodo sapien fermentum ullamcorper. suspendisse ornare varius est, eget condimentum lectus sagittis vitae. curabitur massa nec ligula sodales fringilla. morbi vestibulum rutrum risus. in sit amet turpis ut lacus dapibus posuere sed sit amet metus. phasellus et posuere lacus. vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; maecenas vitae mi sit amet neque pharetra mollis. mauris lorem est, luctus id leo nec, laoreet eleifend augue. sed posuere nisl non nisl congue blandit quis orci. vestibulum sit amet magna sit amet turpis ultricies dictum. ) what want do, full link , id. not rest of content. since im bad @ regex, still. dont know correct way stop matching it. thought, if content has multiple links, them too.. nunc tempor neque sed libero sodales... part there unnecessary.
preg_match('/youtube\.com\/v\/([^\&\?\/]+)/', $input, $id) this part:
([^\&\?\/]+) is part that's matching. it's looking multiple characters, aren't (the initial ^ negates range) ampersands; question marks; or slashes. , because none of characters in rest of string, matches everything, right end.
to fix it, there couple of options:
preg_match('/youtube\.com\/v\/([^\&\?\/\s]+)/', $input, $id) will stop when gets space (\s matches whitespace, includes tabs , newlines)
preg_match('/youtube\.com\/v\/(\d+)/', $input, $id) will match numbers (\d matches number) - don't know if youtube ids numbers, sample 1 is.
edit:
there couple of ways can make more flexible; can regex, make more complex. i'd suggest instead running $input through str_replace, strip out parts of url you're not sure about:
$input = str_replace ('http://', '', $input); // remove http:// $input = str_replace ('https://', '', $input); // ... , https:// $input = str_replace ('www.', '', $input); // ... , www. that leave formatted string in $input can parse normally.
Comments
Post a Comment