繁体   English   中英

如何从 PHP 中的 preg_match_all 结果中去除空格?

[英]How can I trim whitespace from results of preg_match_all in PHP?

给定 function:

function getUrlsAndEmails($string) {
    $regex = '/(?:[^\s]+@[a-z]+(\.[a-z]+)+)|(?:(?:(?:[a-z]+:\/\/)|\s)[a-z]+(\.[a-z]+)+(\/[^\s]*)?)/';
    preg_match_all($regex, $string, $matches);
    return ($matches[0]);
}

有时会返回如下结果:

Array
(
    [0] => google.com
    [1] =>  yahoo.com
)

如何有效地从preg_match_all()的所有结果中去除空格?

当然,我可以遍历所有结果和trim() ,但有没有比将其添加到上面的 function 更有效的方法:

foreach ($matches[0] as $k => $v) {
    $matches[0][$k] = trim($v);
}

尝试这个:

$regex = '/(?:[^\s]+@[a-z]+(\.[a-z]+)+)|(?:(?:(?:[a-z]+:\/\/)|(?!\s))[a-z]+(\.[a-z]+)+(\/[^\s]*)?)/';

它对空间使用否定的超前断言。

使用map('trim')

<?php
$pattern = Pattern::of('(?:[^\s]+@[a-z]+(\.[a-z]+)+)|(?:(?:(?:[a-z]+:\/\/)|\s)[a-z]+(\.[a-z]+)+(\/[^\s]*)?)');
$matcher = $pattern->match($string);
   
var_dump($matcher->map('trim'));

结果

Array
(
    [0] => 'google.com'
    [1] => 'yahoo.com'
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM