2

HTML のコメント付きテキストを除いて、複数のスペース、タブ、および改行を 1 つのスペースに置き換える必要があります。たとえば、次のコード:

<br/>    <br>

<!--
this   is a comment

-->
<br/>   <br/>

に変わるはずです

<br/><br><!--
this   is a comment

--><br/><br/>

何か案は?

4

4 に答える 4

1

複数の実行でこれを行う方がはるかに簡単です (たとえば、php マークダウンで行われます)。

ステップ 1:preg_replace_callback()元の値をキー付き配列に保持しながら、一意のコメントを含むすべてのコメント -- 例:array('comment_placeholder:' . md5('comment') => 'comment', ...)

ステップ 2:preg_replace()必要に応じて空白。

ステップ 3:str_replace()キー付き配列を最初に使用していた場所にコメントを戻します。

あなたが傾いているアプローチ(文字列を分割し、コメント以外の部分のみを処理する)もうまく機能します。

醜い後読みを使用して純粋な正規表現でこれを行う手段はほぼ確実にありますが、実際にはお勧めしません: 正規表現はバックトラッキング関連のエラーを生成する可能性があり、コメント置換ステップにより、必要に応じてコメントを気にせずに処理を進めることができます。彼ら自身。

于 2013-06-23T15:53:42.260 に答える