Javaの正規表現は、文字の前または後にスペースを一致させます

マットZdj:

私は、入力フィールドを検証する正規表現を持ってしてみてください。

この質問はの続きで、この質問が、私はミスを犯し、私は新しいものを作成したので、質問が少し変更しました。

ここに私のJavaの正規表現は次のようになります。

^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$

デモ

私は試合に抱き合わせてることは次のとおりです。

  • 最低2英数字(以下「?」他と「*」)
  • 「*」一度だけ表示され、文字列の最後にすることができます
  • 「?」缶は、複数の時間が表示されます
  • 冒頭に空白権
  • 空白の前または後に「?」または「*」

exempleのためので:

  • DAC = OK
  • ?BCD = OK
  • AB ?? = OK
  • AB * = OK
  • AB?* = OK
  • ?? CD = OK
  • 2枚のCD = OK
  • * abがOKではありません=
  • A?B = NOT OK
  • ??? = NOT OK
  • AB?CD = NOT OK
  • AB?D = NOT OK
  • AB * = NOT OK
  • ABCD = NOT OK(初めにスペース)

私はファースト・質問に尋ねてきたように、全くの空白は、今、私の正規表現で許可されていないが、それは私が欲しいものではありませんし、私は少し迷ってしまいましたしているあなたは私を助けてくださいことができますか?

Wiktor第Stribiżav:

あなたは使用することができます

^(?!\s)(?!.*\s[*?])(?!.*[*?]\s)(?:[?\s]*[a-zA-Z0-9]){2}[a-zA-Z0-9?\s]*\*?$

参照してください。正規表現のデモを

使用上の注意:あなたは、Javaのとそれを使用する場合.matches()、方法^及び$パターンから削除することができます。文字列リテラル内の二重のエスケープバックスラッシュを覚えておいてください。

細部

  • ^ - 文字列の先頭
  • (?!\s) - 何の空白は(文字列の先頭で)すぐ右に許可されていません
  • (?!.*\s[*?])-何の空白を前に、できるだけ多くのように、任意の0+文字の後に許可されていません*?
  • (?!.*[*?]\s)-何の空白は後に、できるだけ多くの、任意の0+文字の後に許可されていません*?
  • (?:[?\s]*[a-zA-Z0-9]){2} - 2つのシーケンスの
    • [?\s]*- 0以上?または/および空白
    • [a-zA-Z0-9] - 英数字の文字
  • [a-zA-Z0-9?\s]*- 0以上の文字、数字、?または空白
  • \*?-オプションの?文字
  • $ - 文字列の末尾。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214176&siteId=1