Regex 处理包含2个排除项的正则表达式

Regex 处理包含2个排除项的正则表达式,regex,regex-negation,Regex,Regex Negation,我有一个正则表达式,它处理包含所有字母数字字符的URL,包括-和。我想添加一个例外,因此它不会处理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_-]+)?

我有一个正则表达式,它处理包含所有字母数字字符的URL,包括
-
。我想添加一个例外,因此它不会处理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_-]+)?
有什么想法吗

我使用以下链接作为指导线



如果“基本”或“高级”只能位于序列的开头,那么像
/\/(?!基本\/)(?!高级\/)([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);
?>

如果“基本”或“高级”只能位于序列的开头,则类似于
/\/(?!基本\/)(?!高级\/)([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);
?>

检查此项,但无论如何,其他非字母数字字符也匹配

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

检查此项,但无论如何,其他非字母数字字符也匹配

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

是否有理由需要包含在正则表达式中,而不是在使用正则表达式之前使用编程语言通过简单的文本比较排除URL?事实上,我在zend系统中使用了这个。第一个正则表达式已经存在将URL路由到具有产品ID和子ID的单个控制器和模块。我需要添加一个异常,这样我就可以将basic和advance路由到不同的控制器和模块。我可以用编程的方式来做这件事。但是我想用一种正确的方式来做这件事。有没有一个原因需要包含在正则表达式中,而不是在使用正则表达式之前使用编程语言通过简单的文本比较来排除URL?实际上我在zend系统中使用了这个。第一个正则表达式已经存在将URL路由到具有产品ID和子ID的单个控制器和模块。我需要添加一个异常,这样我就可以将basic和advance路由到不同的控制器和模块。我可以用编程的方式来做这件事。但是我想以正确的方式来做这件事。嗯,我对Zend framework的工作原理不是非常熟悉,但是下面的脚本确实区分了以“basic”或“advance”开头的内容和所有其他匹配字符串,我理解这是问题的关键<代码>(将脚本添加到答案本身以使其更具可读性)好吧,我对Zend framework的工作原理不是非常熟悉,但下面的脚本确实区分了以“basic”或“advance”开头的内容和所有其他匹配字符串,这是我理解的问题所在<代码>(将脚本添加到答案本身以使其更具可读性)