如果 URL 中的两个特殊符号中的任何一个应被视为分隔符(第一个字符后跟 URL),则使用 PHP 从字符串中提取 URL?

Extract URL's from a string using PHP if any of two special symbols in the URL should be treated as delimiters (the first characters followed by URL)?

要提取 URLs(不是一个完美的解决方案,但我几乎满意,因为性能很重要)我使用

preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match);

提取 URL 的代码。 然而,这对我来说不是一个完美的解决方案,因为如果这两个符号中的任何一个在提取的 URL 中遇到,则 URLs 应该被强制削减到 ]"|"

我知道这些符号在 URL 中是有效的,但是对于我来说它们应该是无效的。 上面的preg_match_all应该怎么稍微修改一下就知道这两个分隔符呢? 谢谢。

[:punct:][!"\#$%&'()*+,\-./:;<=>?@\[\\]^_``{|}~].

的缩写

在您的正则表达式中,您使用的是否定字符 class [^,[:punct:]\s],可以写成:[^!"\#$%&'()*+,\-./:;<=>?@\[\\]^_``{|}~\s](我删除了第一个逗号,因为它已经存在并且我'重复反引号以突出显示)。

如果要允许 ]|,请将它们从字符 class 中删除:

[^!"\#$%&'()*+,\-./:;<=>?@\[\^_`{}~\s]