我試圖以匹配不包含子正則表達式的字符串不包含子串
我的字符串開頭總是「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