正規表現マッチが特定の文字列が含まれていない場合は、文字列の一部を一致させる - PCREはgrepを

StackOverflow https://stackoverflow.com/questions/4608492

質問

私が検索を実行するためにTextWranglerのはgrepを使用しています/複数のファイルに置き換えると、最後の検索で壁に実行している/私は実行する必要があります交換してください。私はラインで"><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>  

正規表現の望ましい行動:
第一行目のマッチ">FooBar<br />
2行目のマッチしない
3行目のマッチ">Hello World<br />
4行目のマッチしない

"><br />間のテキストを置き換える機能を使用するグループに捕捉されるであろう。私は否定先読みでは、次の正規表現を使用していただが、必要に応じて、これは3行目とは一致しません最も近います:

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

すべてのヘルプやアドバイスが理解されます。ありがとうございました。

役に立ちましたか?

解決

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

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

A(ショート)説明:

">               # 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]を交換する必要がある場合は、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top