2

我有一个正则表达式,它处理一个包含所有字母数字字符的 URL,包括-and _。我想添加一个例外,所以它不会处理 URL/basic/advance

/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

它应该处理上面的所有内容,除了“基本”和“高级”这两个词。

如何在上面的正则表达式中添加异常。

我试图在下面做一些事情,但没有奏效。

/?([a-zA-Z0-9_-]+^(?!basic) ^(?!advance))?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

有任何想法吗?

我使用以下链接作为指南。

使用正则表达式的字符串否定 正则
表达式和否定整个字符组
什么是非捕获组?问号后跟冒号 (?:) 是什么意思?

4

2 回答 2

0

/\/(?!basic\/)(?!advance\/)([a-zA-Z0-9_-]+)?\/([a-zA-Z0-9_-]+)?\/([0-9_-]+)?/如果“基本”或“高级”只能站在序列的开头,则应该完成这项工作。我认为您不需要 ^ 在负前瞻组件之前的符号,也不需要中间的空格。

这是一个测试它的脚本:

<?PHP
    $ptn = "/\/(?!basic\/)(?!advance\/)([a-zA-Z0-9_-]+)?\/([a-zA-Z0-9_-]+)?\/([0-9_-]+)?/";
    $str = '/basic/asdasd/123'; 
    preg_match($ptn, $str, $match1);
    print_r($match1);
    $str = '/bazic/asdasd/123';
    preg_match($ptn, $str, $match2);
    print_r($match2);
?>
于 2012-06-20T09:30:25.853 回答
0

检查这个,但无论如何其他非字母数字字符也匹配!

/?([a-zA-Z0-9_-]+)?/?(?!.*(?:begin|advance))([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

调试演示

于 2014-10-23T14:48:40.860 回答