2016-06-21 48 views
2

整数値とnull(単語ヌルまたはNULL)を受け入れるが、小数点や文字列は受け入れない正規表現を書くのに助けてくれる人がいますか?整数とnullを受け入れる正規表現

私が表現してみました:

/^([nN][uU][lL][lL])?|(-?\d+?)?$/  
/^(null|NULL)?|(-?\d+?)?$/ 

が、彼らは、文字列と数値と文字列の組み合わせを受け入れています。

+3

2つのブランチとsの交代。最初のアンカーは最初のアンカーを持ち、2番目のアンカーはアンカーです。 –

+1

'^(null | NULL | - ?\ d +)?$'(これは空の文字列も許可します)のアンカー間のパターンを囲むグループを使用してください。 –

答えて

0

大文字と小文字を区別しないフラグiを使用すると、ときには簡単になります。

キャプチャグループは両方のOR条件を囲むことに注意してください。
そのグループは?でオプションにしません。

/^(null|[-]?\d+)$/i 

またはiフラグなし

/^(null|NULL|[-]?\d+)$/ 
+0

*今*それは答えです。しかし、文字クラスに1文字を入れることは意味がありません。 '[ - ]?'は ' - ?'と同じです。そして、私は「グループはオプションで作られていないのですか?」というステートメントをかなり理解していません。 – ClasG

+0

'/(\ w +)?/'を実行すると、0語または1語を探すようになります。これは、 '/(\ w +)+?/'とは異なり、 '?'がレイジーマッチングのために追加されています。したがって、単語がない場合は一致します。つまり、オプションの用語です。そして、私はそれをしませんでしたが、質問の例がしました。 '-'の前後に角括弧を置くことは、この場合は本当に必要ではないので、正規表現で何らかの意味を持つ文字を括弧でくくるのはちょっとだけです。そして、私は単に ' - - ? 'を追加しただけです。例に' - ?'があるからです。おそらく '[+ - ]? ' – LukStorms

0

これは、あなたがしたい正規表現である: - あなたのアンカーが要因ではないので

Pattern p = Pattern.compile("(?i)((null)*\\d*)*"); 
String s = "null123null"; 
System.out.println(s.matches(p.toString())); 

出力

関連する問題