-1

サーバーパスを表す次の3つのパスの例を考えると、PCRE正規表現を介してFTPクライアントのスキップリストを作成しようとしていますが、望ましい結果が得られないようです。

/subdir-level-1/subdir-level-2/.../Author1_-_Title1-(1234)-Publisher1
/subdir-level-1/subdir-level-2/.../Author2_-_Title2_(5678)-PUBLiSHER2
/subdir-level-1/subdir-level-2/.../Author3_-_Title3-4951-publisher3

で終わらないすべてのフォルダー(パスではない)スキップしたい

-Publisher1

このオンラインヘルプとこの正規表現テスターの助けを借りて作業パターンを作成しようとしていますが、この否定的な先読みパターンよりも先に進むことはできません

.*-(?!Publisher1)

しかし、このパターンではすべての行が一致します。これは、すべての行で、パターンまでの部分文字列にすべてパターンが含まれていないためです。

/subdir/subdir/.../Author1_-_Title1-(1234)  -Publisher1
/subdir/subdir/.../Author2_-_Title2_(5678)  -PUBLiSHER2
/subdir/subdir/.../Author3_-_Title3-4951    -publisher3

私の間違いは何ですか?スキップする行として2行目と3行目のみを一致させ、最初の行を保持するのは正しいパターンですか?

編集して、何を強調し、何を強調しないかを明確にします。

パスの先頭から最後のスラッシュまでのすべてを無視する (許可する) 必要があります。定義された正規表現に一致する最後のスラッシュの後のすべてをスキップする必要があります。

スクリーンショットを見る

赤い部分だけに一致する高度なパターンを提示するための編集

[^/]*(?<!-Publisher2)$

正規表現の視覚化

Debuggex デモ

4

4 に答える 4

3

使用した正規表現は次のとおりです。

.*-(?!Publisher1)

私はあなたにそれの何が悪いのかを教えます。

-この正規表現によると、が続く行がない行と一致しPublisher1ます。わかりました、はい、あなたの-テキストの間にあることに気づきましたか。著者とタイトルの間、またはタイトルの後に。したがって、すべての文字列がこの条件を満たしています。代わりに、hiphen が Publisher1 にあるような方法で否定的な先読みで検索すると、一致が機能するはずです。

したがって、ハイフンを括弧内に移動して一致するようにし、正規表現を次のようにすることを計画しています。

^.*(?!-Publisher1)

ただし、これも機能しません。ここでは .* がすべてに一致するため、先読みを行うと、一致する単一の文字を見つけることができません。したがって、否定後読みを使用します。<.

.*(?<!-Publisher1)

今何?. 私はすべてをやりましたが、まだそれを機能させることができません。なぜそうなのですか?

否定的な後読みは後戻りし、その後に が続いていないかどうかを伝えるためです-Publisher1

これは複雑です。

あなたの文字列を仮定します

/subdir/subdir/.../Author1_-_Title1-(1234)-Publisher1

に対して否定後読みを行い-Publisher1ます。1 の 後 の 位置 から . つまり、-Publisher1振り返ると文字列の最後に表示されます。しかし、私たちの条件は否定的な後読みです。そのため、1 文字左に移動して、振り返って「ここから -Publisher1 が見える」と言うことができなくなる位置に到達します。ここからは「-Publisher」しか見えないからです。条件は満たされますが、正規表現は文字列の残りの部分と一致します。

そのため、後読みを文字列の末尾にバインドして、一致を検索するために 1 文字左に移動しないようにすることが不可欠です。

最終的な正規表現:

.*(?<!-Publisher1)$

ここでのデモ: http://regex101.com/r/lE1vW2

于 2014-04-09T16:26:40.097 に答える
1

Publisher1 を含む行を除外するには、次の正規表現を使用できます。

^((?!Publisher1).)*$

オンライン デモ: http://regex101.com/r/gD8jK0

于 2014-04-09T16:07:36.953 に答える
1

これはあなたのニーズに合うはずです:

^.*(?<!-Publisher1)$

正規表現の視覚化

Debuggex デモ

于 2014-04-09T16:00:09.810 に答える