2017-07-10 9 views
1

javaのテキストパターンに問題があります。このパターンを使用して、挿入されたテキストを検証して、テーブル内のテキストをフィルタリングする必要があります。このテキストには "!"(not)と "*"(?など)を含めることができます。 &(および)と|(または)を使用して、論理式をテキスト操作(endsWith、startsWith、contains)と結合することもできます。正確に私が望むのは、テキストの検証を行わないようにすることです。私のパターン"\s*(!?\*?[^&\|]*[&\|])*!?\*?[^&\|]*\*?\s*"で有効なテキストフィルタの正規表現が無効です

A* 
*A 
*-* 
!a|b&c|!ab 
!a|*b&c*|!*ab 
!*aa*|*sdb&casd*|!*aasdb* 
!*aa|*sdb&casd*|!*aasdb* 
S*|L* 

のためではない有効なテキスト

- 
! 
!* 
*! 
!! 
** 
*! 
!* 
A** 
**A 
*A& 
&A* 

の例および実施例は、両方のグループが有効です。私は差の組み合わせを試みたが成功しなかった。何か案は?

+0

これは '.gitignore'ファイルですか? –

+0

なぜ最初の入力が無効で、なぜ2番目の入力が有効なのですか? –

+0

@Tim Biegeleisenこれは.gitignoreファイルではありません。 – solejnik

答えて

1

あなたが何を望んでいないかについてのあなたの記述は、あなたの例が完全にはっきりしているわけではありません。たとえば、*-*は有効です。-が有効なフィルタ文字であることを示しています。なぜ、-は無効ですか?論理的ではありません。

しかし、私は集めることができるものから、あなたはこのような何か後にしている:

\s*(?:!?\*?[^&|*!\n]+\*?[&|])*!?\*?[^&|*!\n]+\*?\s* 

それはまず、オプション部品のための非キャプチャグループを使用しています。これが存在する場合は、|または&で終了します。次に、終端演算子を持たないことを除いて、同じではないオプションの部分に従います。

オプションの!、場合によってはその後のオプションの*が続きます。その後、任意の文字しかし、&|!または改行 - 少なくとも1つ。最後にオプションの*が続きます。

See it here at regex101

開始と終了のアンカー(^$)は、javaのmatchesメソッドを使用することを意味します。別のメソッドや別の正規表現のフレーバーを使うと、それらを追加する必要があります。これは基本的には何でも一致します。

+0

QClasGあなたは " - "について正しいです。この " - "も有効である必要があります。 このパターンは私が探しているものです:) – solejnik

関連する問題