正则表达式匹配URL中的单词

时间:2012-01-24 13:43:51

标签: regex

我需要一个匹配的正则表达式:

http://example.com/foo
http://example.com/foo/
http://example.com/foo/bar

但不是:

http://example.com/foobar

使用http://example.com/foo/?匹配这三种类型,但它也与我不想要的/foobar匹配。我应该将正则表达式添加到哪个不匹配/foobar

5 个答案:

答案 0 :(得分:4)

试试这个:

^http://example\.com/foo(?:/.*)?$

答案 1 :(得分:1)

在正则表达式中,最后/?表示结尾处的可选/。所以/foobar也匹配。 试试这个:

http:\/\/example\.com\/foo($|\/.*)

答案 2 :(得分:0)

尝试这样的事情:

http://example.com/foo(?:\/|/(\w+)|)

以正则表达式形式:

/http:\/\/example.com\/foo(?:\/|\/(\w+)|)/

这将与example.com/foo或example.com/foo/bar或example.com/foo /

相匹配

一些解释:

  • (foo|bar)匹配foo或bar
  • (?:)将不会捕获开头?:的群组
  • \/将与/在最后匹配
  • \/(\w+)将a /与重复一次或多次的单词字符匹配
  • |)将匹配字符串末尾的任何内容。

答案 3 :(得分:0)

我会使用否定前瞻(?!):

$urls = array(
    'http://example.com/foo',
    'http://example.com/foo/',
    'http://example.com/foo/bar',
    'http://example.com/foobar'
);

foreach ($urls as $url) {
    if (preg_match('#^http://example\.com/foo(?!bar)#', $url)) {
        echo $url, " matches.\n";
    } else {
        echo $url, " does NOT match.\n";
    }
}

// Output:
// http://example.com/foo matches.
// http://example.com/foo/ matches.
// http://example.com/foo/bar matches.
// http://example.com/foobar does NOT match.

答案 4 :(得分:0)

Javascript正则表达式

HTTPS:????//(example.com)/ / [^ /] * /(巴)

在这里测试:(更多信息..)

http://tools.netshiftmedia.com/regexlibrary/