我需要一个匹配的正则表达式:
http://example.com/foo
http://example.com/foo/
http://example.com/foo/bar
但不是:
http://example.com/foobar
使用http://example.com/foo/?
匹配这三种类型,但它也与我不想要的/foobar
匹配。我应该将正则表达式添加到哪个不匹配/foobar
?
答案 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)/ / [^ /] * /(巴)
在这里测试:(更多信息..)