使用lookahead斷言。
當您想檢查一個字符串不包含另一個子,你可以寫:
/^(?!.*substring)/
您還必須檢查開始和線對this
和word
末:
/^this(?!.*substring).*word$/
這裏的另一個問題是你找不到字符串,你想找到句子(如果我理解你的任務是正確的)。
因此,解決辦法是這樣的:使用的
perl -e '
local $/;
$_=<>;
while($_ =~ /(.*?[.])/g) {
$s=$1;
print $s if $s =~ /^this(?!.*substring).*word[.]$/
};'
例子:
$ cat 1.pl
local $/;
$_=<>;
while($_ =~ /(.*?[.])/g) {
$s=$1;
print $s if $s =~ /^\s*this(?!.*regexp).*word[.]/i;
};
$ cat 1.txt
This sentence has the "regexp" word. This sentence doesn't have the word. This sentence does have the "regexp" word again.
$ cat 1.txt | perl 1.pl
This sentence doesn't have the word.
您的規則很混亂,或者您的預期輸出出現錯誤。爲什麼不「和」以及爲什麼沒有「大段文字」。 – sjakubowski 2012-08-08 17:20:27
@sjakubowski「子字符串由'this'開始,以'word'結尾」 – Mathletics 2012-08-08 17:22:15
這條規則令人困惑,但是正確。我花了很多時間在谷歌找到一些東西,但什麼都沒發現。 – Artem 2012-08-08 17:26:05