如何使用php正则表达式在字符串中查找带参数的url

如何使用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\

小结:我需要在一段中获得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\?.*?&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>&nbsp;</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>&nbsp;</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"
  }
}