Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从函数中获取值_Php_Function - Fatal编程技术网

Php 从函数中获取值

Php 从函数中获取值,php,function,Php,Function,我正在完成一个转换字符串并将其作为链接传递的脚本,但除此之外,它还使用API缩短URL。问题是,我无法思考如何只获取URL而不是整个链 职能: function findAndShort($string) { $text = preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>

我正在完成一个转换字符串并将其作为链接传递的脚本,但除此之外,它还使用API缩短URL。问题是,我无法思考如何只获取URL而不是整个链

职能:

function findAndShort($string) {
    $text = preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>', $string);
    return $text; 
}

在这种情况下,只需要,我尝试使用$chk[0],但当然,打印行上的第一个字符。

函数的问题是,您只能返回函数中
返回值下的单个值,因此在您的情况下,测试完函数后,返回值是原始输入值

如果您希望函数只返回URL组件,我将使用
explode
分离字符串,然后从
explode
函数中对结果数组的每个部分运行
preg\u match
,查找https、ftp或mailto,一旦我知道数组的哪个部分正在使用,我将停止进程,定义var,因为我相信您希望返回链接的代码,所以我会做如下操作

返回“”

请注意,var
$url
将通过上述过程创建


我希望这有帮助

只需在正则表达式的开头添加
^.*
,并使用$1而不是$0:

$text = preg_replace("/^.*((https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#,]*(\?\S+)?)?)?)/u", '<a href="$1">$1</a>', $string);

你所说的url是指href=“…”中的内容吗?问题是我想不出如何只获取url而不是整个链,这是什么意思?什么是“链条”?请详细说明并提供一些示例输入和输出,以及您希望得到的结果。你越清楚地描述你的问题,你就会得到更好的答案!我设法使用一个旧的API()提取并转换url。。但是现在的问题是,我不能转换所有的链接(我很确定问题出在regexp中,在粘贴2链接的第99行),例如:
http://localhost/index.php/topic,28410.0.html
,仅提取到
现在所有文本都是链接。我只需要链接本身,即捕获字符串的url并将其转换为variable@wiitohzjeh:再使用一对括号,并使用$1而不是$0。请参阅我的编辑。@wiitohzjeh:只需在字符类中添加一个逗号
。看我的编辑。完美!!非常感谢@M42:)
$text = preg_replace("/^.*((https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#,]*(\?\S+)?)?)?)/u", '<a href="$1">$1</a>', $string);
~^.*((https?|ftps?|mailto)://[-\p{L}\p{N}_.]+(:\d+)?(/([\p{L}\p{N}/_.#,]*(\?\S+)?)?)?)~u