如果 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]
要提取 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]