1
'@^(?<!h2.).*\s*\n@'

この

'@^(?<!h2.).*\n@'

次のファイルにはしないでください

la-la-la

h2. ohoho

abc
def

file_get_contents() によって読み取られる文字列

実際、正規表現は次の式内で呼び出されます

TextileThis(preg_replace('@^(?<!h2.).*\s*\n@','',file_get_contents($that_file)));

したがって、ファイルの最初の文字列が一致しない場合は削除したかったのですが^h2\..*\s*$、php で「その正規表現に一致しない」とは言えないため、この「後読み」フォームを使用する必要がありました。

正規表現形式の両方が機能することを言及する必要がありますが、最初の形式はうまく機能し、2 番目の形式では、h2.テキスタイルによって未処理でそのまま残されている行が得られます。テキスタイルでは、h2.文字列を下のテキストから 1 つの間隔で区切る必要があります。これですべてです。そのため、解析されないままになっている理由と、これらの正規表現が実際に行にどのように影響するかを理解できません。

ソースファイルもチェックしましたが、末尾にスペースはありません。

4

1 に答える 1

2

問題はありませんが、これらの正規表現の違いを説明しようとしています

  1. @^(?<!h2.).*\s*\n@

    この

  2. @^(?<!h2.).*\n@

\sは空白文字です。つまり、\rやなどの改行文字も含まれます\n

したがって、 1。は、2番目の空の行も削除します。これ\sは、最初の行の終わりで改行と一致し、明示的\nに2番目の行の終わりで一致するためです。

2番目の式は最初の行のみを削除します。これは、\nが最初の行の最後ですでに一致し、正規表現によって2番目の空の行が一致しないままになるためです。

したがって、2番目の正規表現に関する問題は、結果の文字列がで始まる空の行に起因すると思います。

于 2012-09-25T07:19:24.613 に答える