如何使用php正则表达式在字符串中查找带参数的url
小结:我需要在一段中获得youtube嵌入链接 输入: “减少社会犯罪\r\n\r\n\r\n\r\n\r\nhttps://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0\“宽度=\“646\”>\r\n” 输出除外: 也许如何使用php正则表达式在字符串中查找带参数的url,php,regex,Php,Regex,小结:我需要在一段中获得youtube嵌入链接 输入: “减少社会犯罪\r\n\r\n\r\n\r\n\r\nhttps://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0\“宽度=\“646\”>\r\n” 输出除外: 也许 (?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\
(?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\?.*?&v=|embed\/|)([A-Z0-9_-]{11})[^\\'"]*(?=\s|$|)
可能行
修改此表达式的关键在于最后几个块,特别是:
[^\\'"]*
在YouTube的11个字符长的ID之后,您希望看到它,这是您希望允许的
如果您真的不想捕获ID,那么我们只需将现有的捕获组转换为非捕获组:
(?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\?.*?&v=|embed\/|)(?:[A-Z0-9_-]{11})[^\\'"]*(?=\s|$|)
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配
试验 正则表达式电路 可视化正则表达式: 来源
$re = '/(?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\?.*?&v=|embed\/|)([A-Z0-9_-]{11})[^\\\\\'"]*(?=\s|$|)/m';
$str = 'Reduced crime in society</li>\\r\\n</ul>\\r\\n\\r\\n<p> </p>\\r\\n\\r\\n<p><iframe allowfullscreen=\\"\\" frameborder=\\"0\\" height=\\"297\\" src=\\"https://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0\\" width=\\"646\\"></iframe></p>\\r\\n
Reduced crime in society</li>\\r\\n</ul>\\r\\n\\r\\n<p> </p>\\r\\n\\r\\n<p><iframe allowfullscreen=\\"\\" frameborder=\\"0\\" height=\\"297\\" src=\\\'https://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0\\\' width=\\"646\\"></iframe></p>\\r\\n';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
array(2) {
[0]=>
array(2) {
[0]=>
string(68) "https://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0"
[1]=>
string(11) "X6UW9MQ8aHs"
}
[1]=>
array(2) {
[0]=>
string(68) "https://www.youtube.com/embed/X6UW9MQ8aHs?control=0&rel=0&showinfo=0"
[1]=>
string(11) "X6UW9MQ8aHs"
}
}