3

TextWrangler grepを使用して複数のファイルの検索/置換を実行していますが、実行する必要のある最後の検索/置換で壁にぶつかりました。">行内のaの最初のインスタンスとの間のテキストを一致させる必要があります<br />が、一致に文字シーケンス[xcol]を含めることはできません。正規表現フレーバーはPerl互換(PCRE)であるため、後読みは固定長である必要があります。

検索するテキストの例:

<p class="x03">FooBar<br />Bar</p>
<p class="x03">FooBar [xcol]<br />Bar</p>
<p class="x06">Hello World<br />[xcol]foo[xcol]bar<br /></p>
<p class="x07">Hello World[xcol]<br />[xcol]foo[xcol]bar<br /></p>  

正規表現の望ましい動作:
1行目一致 ">FooBar2<br />
行目一致なし
3行目一致HelloWorld4行 目一致なし "><br />

">との間のテキストは<br />、置換機能で使用されるグループにキャプチャされます。私が得た最も近いものは、負の先読みで次の正規表現を使用することでしたが、これは希望どおりに3行目と一致しません。

">((?!.*?\[xcol]).*?)<br />

ヘルプやアドバイスをいただければ幸いです。ありがとうございました。

4

1 に答える 1

3

この正規表現を試してください:

">((?!\[xcol]).)*<br\s*/>

(短い)説明:

">               # match '">'
(                # start group 1
  (?!\[xcol]).   #   if '[xcol]' can't be seen ahead, match any character (except line breaks)
)                # end group 1
*                # repeat group 1 zero or more times
<br\s*/>         # match '<br />'

の改行も一致させる必要がある場合は.、DOT-ALL((?s)の前に追加)を有効にするか、を次のようなもの.に置き換えます。.[\s\S]

于 2011-01-05T19:54:26.490 に答える