【问题标题】:PHP Regular Expression To Match Any URL Except Those From Example.comPHP 正则表达式匹配除 Example.com 之外的任何 URL
【发布时间】:2010-03-01 20:02:43
【问题描述】:

为伪正则表达式提供一个示例:根据 PHP 正则表达式语法匹配除 example.com 和 example2.com 之外的每个 url。

这是我目前所拥有的,但它不起作用:

$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i";

【问题讨论】:

  • 这是作业吗?如果是,请标记它。
  • 大声笑,不。这不是家庭作业。我只是正则表达式的新手。但是谢谢你的侮辱!怎么回答?
  • 不是侮辱;只是质量控制。通常以这种方式表达的问题是 - 看看第一段看起来有点像作业的要求。就是这样:)
  • 是的,我想我可以看到它的样子......我只是想而不是写“我正在尝试......”或“我想这样做......”我会写得更专业一点。
  • 是的,发布的问题看起来像是从家庭作业中复制的。它不会让它看起来很专业,它让它看起来不是一个问题。

标签: php regex url pattern-matching


【解决方案1】:

不要对不需要的东西使用正则表达式。

$parts = parse_url($url);
if ($parts && $parts['host'] != 'example.com' && $parts['host'] != 'example2.com') {
    // the URL seems OK
}

【讨论】:

  • Lukas,我正在尝试从文本文档中提取 url。我手头没有网址。我确实需要正则表达式。
【解决方案2】:

这里的问题是,在类定义 ([]) 中,(| 等特殊字符失去了意义。

更好的解决方案是在 example.com 或 example2.com 上进行匹配,然后只进行否定测试。

【讨论】:

  • 感谢 Segfault,看来我必须删除所有 example.com 网址,然后搜索任何剩余的网址,对吗?再次感谢!
【解决方案3】:

不,方括号之间的所有内容都只会匹配一个字符。例如正则表达式:

[^example]

将匹配除example 之外的任何单个字符。

尝试否定lookahead

@https?://(www\.)?(?!example2?.com)@i

【讨论】:

    【解决方案4】:

    你几乎已经有了答案。 这将进行您想要的匹配。

    $patternToMatch = "@https?://(example.com|example2.com)@i";
    

    【讨论】:

    • 感谢 aberpaul,但看起来它只能找到 example.com 和 example2.com - 我想要除了 example.com 和 example2.com 之外的所有内容
    • 我假设(可能是错误的)您将能够使用 PHP?检查匹配是否返回真/假。我可以看到沿着这些思路的段错误。
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多