正则表达式:排除某些字符串但包含其他字符

时间:2011-05-06 16:58:06

标签: regex

我有这个链接:

http://anthropology.school.com/stuff/anthropology.999.ug.courses

正则表达式是什么,用于排除包含/stuff/但仍包含999.ug.courses的所有链接的所有链接(即使包含/stuff/

例如,上面的链接就可以了,因为它包含999.ug.courses/stuff/

我只是不想在链接中仅包含/stuff/的那些。

另外,我是在一个简单的配置文本文件中用我正在使用的开源文件写的。

样品:

^http://([a-zA-Z0-9]*\.)*school.com/

^(file|ftp|mailto):

\.gif|GIF|jpg|com|JPG|js|png|php|PNG|pp|ico|atom|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|py|exe|pdf|jpeg|JPEG|bmp|BMP)$

[?*!@=]

(/about|/giving|/admissions|/Admissions|/studyabroad|/summer|/spring.in.ny|/winter|/academics|/life|/research|/global|/footer|/content|/AZ|/registrar|/its|/shc|/999|/explore.school|/prehealth|/eve|/people|/events|/IAA|sca|/aboutus|/subfields|/specialprograms|/newsevents|/resources|/employment)

感谢。

4 个答案:

答案 0 :(得分:2)

如果这些是您需要匹配的唯一内容,这个正则表达式应该这样做(采用Perl格式):

/http:\/\/anthropology.school.com(\/\w+\/(?<!\/stuff\/)\w*)|(\/stuff\/anthropology\.999\.ug\.courses)/

它首先匹配URL的开头,然后匹配一个名为 stuff /stuff/anthropology.999.ug.courses 的目录。

答案 1 :(得分:0)

它必须是一个正则表达式吗?你能做!/\/stuff\// || /999.ug.courses/吗?

答案 2 :(得分:0)

您正在寻找条件子模式评估。以下正则表达式适合您:

~.*?(999\.ug\.courses)(?(1).*?|(?<!/stuff/))~

使用php代码:

preg_match('~.*?(999\.ug\.courses)(?(1).*?|(?<!/stuff/))~', $str, $m );
var_dump($m);

当我使用以下代码运行代码时

$str ="http://anthropology.school.com/stuff/anthropology.999.ug.courses";

我得到了:

array(2) {
  [0]=>
  string(64) "http://anthropology.school.com/stuff/anthropology.999.ug.courses"
  [1]=>
  string(14) "999.ug.courses"
}

但是当我在上面运行代码时(文本中没有anthropology.999.ug.courses):

$str ="http://anthropology.school.com/stuff/anthropology.888.ug.courses";

我得到了:

array(0) {
}

以上是上述代码的live demo

答案 3 :(得分:0)

怎么样:

preg_match('#^.+?/stuff/(?!.*999\.ug\.courses).*$#', $url));

您想要的网址是 与正则表达式匹配的网址。