匹配url中的特定正则表达式单词

时间:2013-11-25 15:38:21

标签: php regex preg-match

我必须承认我从未习惯使用正则表达式,但是最近我遇到了一个问题,即使用正则表达式来解决问题会更加困难。我需要能够在字符串的开头匹配以下模式的任何内容: {any_url_safe_word} +("/http://" || "/https://" || "www.")+ {any word}。 所以以下内容应该匹配:

  • cars/http://google.com#test
  • cars/https://google.com#test
  • cars/www.google.com#test

以下内容不应该匹配:

  • cars/httdp://google.com#test
  • cars/http:/google.com#test

我到目前为止尝试的是:^[\w]{1,500}\/[(http\:\/\/)|(https:\/\/])|([www\.])]{0,50},但是匹配来自cars/http的{​​{1}}。

3 个答案:

答案 0 :(得分:3)

这个正则表达式可以做到:

^[\w\d]+\/(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}

如果你想获得它之后的所有内容,你可以直接添加(.*) ......

Live DEMO

enter image description here

由于似乎或多或少一般的网址安全字词列表包含ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;= Source,您也可以将其包含在内,因此您将获得(简化后):

^[!#$&-.0-;=?-\[\]_a-z~]+\/(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}

答案 1 :(得分:0)

<?php
$words = array(
    'cars/http://google.com#test',
    'cars/https://google.com#test',
    'cars/www.google.com#test',
    'cars/httdp://google.com#test',
    'cars/http:/google.com#test',
    'c a r s/http:/google.com#test'
    );

foreach($words as $value)
{
    /*
      \S+           - at least one non-space symbol
      \/            - slash
      (https?:\/\/) - http with possible s then ://
      |             - or
      (www\.)       - www.
      .+            - at least one symbol
     */
    if (preg_match('/^\S+\/(https?:\/\/)|(www\.).+/', $value))
    {
        print $value. " good\n";
    }
    else
    {
        print $value. " bad\n";
    }
}

打印:

cars/http://google.com#test good
cars/https://google.com#test good
cars/www.google.com#test good
cars/httdp://google.com#test bad
cars/http:/google.com#test bad
c a r s/http:/google.com#test bad

答案 2 :(得分:0)

查看demo

[a-z0-9-_.~]+/(https?://|www\.)[a-z0-9]+\.[a-z]{2,6}([/?#a-z0-9-_.~])*

编辑:将@ CD001评论记入帐户。如果您不注意区分大小写,请务必使用i修饰符。