【问题标题】:Check if regex pattern is correct检查正则表达式模式是否正确
【发布时间】:2013-12-16 22:56:46
【问题描述】:

我刚刚制作了一个正则表达式模式来替换指向 HTML 锚标记的链接,就是这样:

~((http\:\/\/|https\:\/\/)([^ ]+)) ~

我问这个的原因是因为我最近刚刚完成了这个正则表达式并用一些链接做了一些测试,它工作得很好但我想确保这个模式没有错误(我是一个正则表达式新手),也许正则表达式专家可以说出他的意见和/或建议。

顺便说一句,如果您要计算末尾的空格,您可能会认为如果字符串不以空格结尾,它将不起作用,但我的诀窍是将该空格添加到字符串之前替换,然后在完成后再次将其删除。

警察局:

我不关心链接的验证本身,我只想搜索以 http:// 开头并以空格结尾的字符串,没有别的,因为链接验证有点复杂。

编辑:

我的一些代码:

<?php

    $patron = "~(https?:\/\/[^\s]+) ~";
    //$patron = "~((http\:\/\/|https\:\/\/)([^ ]+)) ~";
    $reemplazar = '<a href="$1">$1</a> ';
    $cadena = "https://www.youtube.com/watch?v=7it5wioGixA ";

    echo preg_replace($patron, $reemplazar, $cadena);

?>

【问题讨论】:

  • 谷歌搜索“正则表达式测试器”
  • @Donovan 我做了,我用了,现在我想试试 'StackOverflow 专家测试员' :-)
  • 这不是这个网站的真正目的,你实际上没有问题,你正在寻找意见。
  • 那么,我应该在哪里问这个?为什么不是?仍然有疑问,如果它有问题怎么办,有人向我建议更好的东西..?
  • 看看 PHP 的 filter_var 函数 - 特别是 FILTER_VALIDATE_URL 选项。

标签: php regex hyperlink preg-replace preg-match


【解决方案1】:

我认为这可以大大简化:

~(https?://\S+) ~

除此之外:我觉得还可以。

【讨论】:

  • 没有。我通过问号将“https”中的“s”标记为可选。 [^\s] 仅表示“除任何形式的空格之外的所有字符。”
  • [^\s]+也可以简化为\S+
【解决方案2】:

同样的想法,你的模式可以缩短为:

~https?://[^\s"'>]+~    # don't forget to escape the quote you use.

要更改链接的 URL:

$html = preg_replace_callback('~\b(?:(https?://)|www\.)[^]\s"\')<]++~',
    function ($m) {
        $pre = ($m[1]) ? $m[1] : 'http://'; 
        if (filter_var($pre . $m[0], FILTER_VALIDATE_URL))
            return '<a href="' . $m[0] . '">' . $m[0] . '</a>';
        else return $m[0];
    }, $html);

旧答案:

要更改链接内的 URL:

从所有“a”标签中提取所有 href 属性的更好方法是使用 DOM。

$doc = new DOMDocument();
@$doc->loadHTML($htmlString);
$links = $doc->getElementsByTagName('href');
foreach($links as &$link) {
    $href = $link->getAttribute('href');
    $link->setAttribute('href', 'what you want');
}

【讨论】:

  • 我不想提取锚点的href,我想把链接转换成锚点..
  • @Neo:在这种情况下会更复杂,因为 URL 并不总是有协议!
  • 链接的主要要求是至少包含协议,很简单..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多