3

特定の用語で終わらない文字列に一致する正規表現が必要です。

Foo入力は、FooImplFooTestFooTestSuite、 などのクラス名の集まりです。

TestTests、またはで終わらないものと一致させたいTestSuite

一致する必要があります:

  • FooImpl
  • FooTestImpl
  • Foo

一致しない:

  • FooTest
  • FooTestSuite
  • FooTests

私はこれを正しく理解できません。私が今持っているものは間違っているので、わざわざ投稿することさえしません。

4

4 に答える 4

4

言語でサポートされている場合は、否定後読みを試してください。

/(?<!Test)(<?!Tests)(<?!TestSuite)$/

それ以外の場合は、否定先読みを使用して否定後読みをシミュレートできます。

/^(?!.*(?:Test|Tests|TestSuite)$).*$/

紅斑

于 2010-11-03T21:38:41.127 に答える
1

ネガティブ マッチングは、ほとんどの場合、正規表現では実際には実行できないことです。!(string =~ regex) を実行できる理由はありますか?

そのため、grep には -v (反転一致) フラグがあります。

于 2010-11-03T21:42:17.130 に答える
0

grep を使用した代替ソリューションを提案します。

grep -vE ".+(Test|Tests|TestSuite)$" *

-vは否定、-E正規表現マッチング用です。すべての言語が先読みと後読みをサポートしているわけではなく、grep はほとんどプラットフォームに依存しないため、最善の策となる可能性があります。

于 2010-11-03T21:44:27.213 に答える
0

単語境界演算子を使用してみてください。

test\b|tests\b|testSuite\b

それは、それらの文字で終わる単語をターゲットにします。

于 2010-11-03T22:03:42.730 に答える