我有一个正则表达式,用于处理包含-
和_
的所有字母数字字符的网址。我想添加一个例外,因此它不会处理网址/basic
和/advance
/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?
除了“基本”和“提前”之外,它应该处理上面的所有内容。
如何在上面的正则表达式中添加异常。
我尝试在下面做一些事情,但它没有用。
/?([a-zA-Z0-9_-]+^(?!basic) ^(?!advance))?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?
有什么想法吗?
我使用以下链接作为指南。
String negation using regular expressions
Regular Expressions and negating a whole character group
What is a non-capturing group? What does a question mark followed by a colon (?:) mean?
答案 0 :(得分: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);
?>
答案 1 :(得分:0)
检查一下,但无论如何其他不是字母数字字符也匹配!
/?([a-zA-Z0-9_-]+)?/?(?!.*(?:begin|advance))([a-zA-Z0-9_-]+)?/?([0-9_-]+)?