我试图以匹配不包含子正则表达式的字符串不包含子串
我的字符串开头总是“http://www.domain.com/”
我想要的子字符串从比赛排除是名为“.a /”,它后面的字符串来(文件夹名称的域名)
会有字符串中的字符的字符串后,我要排除
例如:
“http://www.domain.com/.a/test.jpg” 不应该匹配
但 “http://www.domain.com/test.jpg” 应该是
我试图以匹配不包含子正则表达式的字符串不包含子串
我的字符串开头总是“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
。 (最终你可以添加你/如果需要之后)
这是好的 - 直到*另一个*程序员被要求扩展它也排除.b,.c和.whatElsethemanagementdoesnotwant – Ingo 2011-03-25 12:55:05
是的......我得到@Ingo。顺便说一句我忘记了\之前/ – 2011-03-25 12:59:49
我在这种情况下的建议不是构造过度复杂的正则表达式whith消极lookahead断言或这样的东西。
保持简单和愚蠢!
做2个匹配,一个匹配积极的东西,稍后挑出底片(或其他方式)。大多数时候,正则表达式变得更容易,如果不是微不足道的话。 而你的程序变得更清晰。
例如,提取以foo的所有行,但没有取得foobar,我用:
grep foo | grep -v foobar
如果您不使用向前看,但只是简单正则表达式,你就可以说,如果它符合你的域,但不以.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
将通过测试,因为它不与/
结束。
如果我想用引号(“)完成匹配怎么办?当我通过HTML搜索时。 – 2011-03-25 13:32:47