Ответ 1
Используйте отрицательное утверждение в виде:
^http://www\.domain\.com/(?!\.a/).*$
Часть (?!\.a/)
соответствует чему-либо, кроме .a/
Я пытаюсь сопоставить строку, которая не содержит подстроку
Моя строка всегда начинается "http://www.domain.com/"
Подстрока, которую я хочу исключить из совпадений, это ".a/", которая появляется после строки (имя папки в доменном имени)
Будут символы в строке после подстроки, которую я хочу исключить
Например:
"http://www.domain.com/.a/test.jpg" не следует сопоставлять
Но "http://www.domain.com/test.jpg" должно быть
Используйте отрицательное утверждение в виде:
^http://www\.domain\.com/(?!\.a/).*$
Часть (?!\.a/)
соответствует чему-либо, кроме .a/
Мой совет в таких случаях заключается не в том, чтобы создавать чрезмерно сложные регулярные выражения с отрицательными утверждениями взгляда или такими вещами.
Держите его простым и глупым!
Сделайте 2 совпадения, один для положительных, и затем соберите негативы (или наоборот). В большинстве случаев регулярные выражения становятся проще, если не тривиальны.
И ваша программа становится понятной.
Например, чтобы извлечь все строки с помощью foo, но не foobar, я использую:
grep foo | grep -v foobar
Я бы попробовал
^http:\/\/www\.domain\.com\/([^.]|\.[^a]).*$
Вы хотите совместить свой домен, а также все, что не продолжается с помощью. и все, что продолжается, с. но не a
. (В конце концов вы можете добавить вас/если необходимо после)
Если вы не используете внешний вид, а просто простое регулярное выражение, вы можете просто сказать, если он соответствует вашему домену, но не соответствует с .a/
<?php
function foo($s) {
$regexDomain = '{^http://www.domain.com/}';
$regexDomainBadPath = '{^http://www.domain.com/\.a/}';
return preg_match($regexDomain, $s) && !preg_match($regexDomainBadPath, $s);
}
var_dump(foo('http://www.domain.com/'));
var_dump(foo('http://www.otherdomain.com/'));
var_dump(foo('http://www.domain.com/hello'));
var_dump(foo('http://www.domain.com/hello.html'));
var_dump(foo('http://www.domain.com/.a'));
var_dump(foo('http://www.domain.com/.a/hello'));
var_dump(foo('http://www.domain.com/.b/hello'));
var_dump(foo('http://www.domain.com/da/hello'));
?>
обратите внимание, что http://www.domain.com/.a
пройдет тест, потому что он не заканчивается на /
.