先読み資産を使用します。
文字列に別の部分文字列が含まれていないかどうかを確認したい場合は、次のように記述できます。
/^(?!.*substring)/
および の行頭と行末も確認する必要がありthis
ますword
。
/^this(?!.*substring).*word$/
ここでのもう 1 つの問題は、文字列を検索するのではなく、文を検索する必要があることです (私があなたのタスクを正しく理解している場合)。
したがって、ソリューションは次のようになります。
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.