1

テキストファイルの特定の領域間の改行を置き換える正規表現を作成しようとしていますが、プレーンテキストコンテンツ(つまり、hrefなどのHTML属性コンテンツ内のテキストを除外)のみで、最初の部分を超えてあまり運がありません。

入力例:

AUTHOR: Me
DATE: Now
CONTENT:
This is an example. This is another example. <a href="http://www.stackoverflow/example-
link-that-breaks">This is an example.</a> This is an example. This is yet another
example.
END CONTENT
COMMENTS: 0

出力例:

AUTHOR: Me
DATE: Now
CONTENT:
This is an example. This is another example. <a href="http://www.stackoverflow/example-link-that-breaks">This is an example.</a> This is an example. This is yet another example.
END CONTENT
COMMENTS: 0

したがって、理想的には、プレーンテキストで発生する場合はスペースで改行を置き換えますが、HTMLパラメータ内にある場合はスペースを追加せずに削除します(ほとんどの場合、hrefであり、それに制限する必要がある場合は問題ありません)。

4

2 に答える 2

1

理想的には、実際のHTMLパーサー(またはXMLの場合はXHTML)を使用して、属性の内容をそれに置き換えます。

ただし、エンジンが任意の長さのポジティブルックビハインドをサポートしている場合は、次の方法でうまくいく可能性があります。

(?<=\<[^<>]+=\s*("[^"]*|'[^']*))[\r\n]+

使用法:この正規表現のすべての出現箇所を空の文字列に置き換えます。

于 2010-10-21T23:33:28.767 に答える
1

これにより、値が二重引用符で囲まれていると仮定して、属性値の改行が削除されます。

$s = preg_replace(
       '/[\r\n]+(?=[^<>"]*+"(?:[^<>"]*+"[^"<>]*+")*+[^<>"]*+>)/',
       '', $s);

先読みは、現在の位置(改行が見つかった場所)と次の位置の間に>、奇数の二重引用符があると主張します。これでは、一重引用符で囲まれた値や、値内の山かっこは使用できません。必要に応じて両方に対応できますが、これはすでに醜いです。;)

その後、残りの改行をスペースに置き換えることができます。

$s = preg_replace('/[\r\n]+/', ' ', $s);

ideone.comで実際の動作を確認してください。

于 2010-10-22T01:27:43.460 に答える