別の人が示唆したよう'/'
に、正規表現のさまざまな文字を a でエスケープする必要があります。そうしないと'\'
、Perl がs///;
途中で終了するものとして読み取るため、エラーが発生するからです。これらを扱うときは、特殊文字に常に注意する必要があります。これは、さまざまな期間で行われていることがわかります。
's/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1\.0 Transitional//EN" "http://www\.w3\.org/TR/xhtml1/DTD/xhtml1-transitional\.dtd">//g'
a の区切り文字をors///;
などの別のもの
に変更して、問題を緩和することができます。HTML を使用している場合は、一般的にそうすることをお勧めします。 s###
s{}{}
それでも、アプリケーションにとって実用的な限り正規表現を単純化するようにしてください。このような HTML は非常に扱いにくいため、貪欲でない任意の種類の正規表現を使用してみてください。ただし、特定のタグをキャプチャするには<
andを使用してください。>
たとえば、次のような正規表現を使用できます...
s{<!DOCTYPE .*?>}{}s
そして、やや説明されたフォーマット...
s{
<!DOCTYPE # opening doctype tag
\s # one whitepsace
.*? # anything (even newlines because of /s flag) non-greedily
> # until the first closing greater than
}{}xs; # x is ignore whitespace, s is have '.' match anything (even \n)
この例では、/x
フラグを使用してコメントアウトし、すべてを説明していますが、コマンドラインでこれを行う場合、これは必要ありません。
私はシェルコマンドにあまり詳しくなく、正規表現の部分だけに精通していないため、質問の残りの部分について話すことはできません。