3

私は次のパターンを持っています

Administrator        yes
User                 yes
Userb                yes
userc                yes
userd                yes

管理者、ユーザー、およびユーザーbではないユーザーの後にyes(その間に任意の数のスペースを入れて)がある場合に一致したい

否定先読みと否定後読みを試みました。たとえば、管理者の場合、これを試しました

(?<!Administrator)\s+yes

ただし、管理者の行にはまだ一致があります。\s+ が原因ではないかと思われます。多くの助けに感謝します、ありがとう。

4

2 に答える 2

2

あなたの仮定は正しいです。\s+単一のスペースに一致するだけで (たとえば!)、このスペースの前にはAdministrator別のスペースが続きます。を否定後読みに含めることは .NET でのみ許可されているため、これを簡単に解決する\s+ことはできません (他の正規表現エンジンは可変長後読みを処理できません)。

ただし、複数行モードを使用する場合 (有効にする方法は言語/ツールによって異なります)、代わりに否定先読みを使用できます。

^(?!Administrator|User|Userb)\w+\s+yes

複数行モード^では、すべての行の先頭に一致します。

更新:実際、これを書いた後、後読みを使用した解決策を思いつきました。一連の単語文字の直後に後読みを実行することを確認してください。

\w+(?<!Administrator|User|Userb)\s+yes

すべてのスペースに一致する必要があります\s+。そうしないと、単語の文字が先行しません。

どちらのソリューションも、プレフィックスを持たないユーザーには問題があることに注意してください。最初のものはユーザーと一致しませんUserbobが、2 番目のものは一致しませんThatUser。これは、単語境界を使用して解決できます。

^(?!(?:Administrator|User|Userb)\b)\w+\s+yes
\w+(?<!\b(?:Administrator|User|Userb))\s+yes
于 2012-10-24T16:02:33.040 に答える
0

これは機能します:

^(?!Administrator|User).*yes   

http://www.rubular.com/r/ijyZT0Eaas

于 2012-10-24T16:08:31.330 に答える