少なくとも一つの数字と1つの文字と正規表現と他のいくつかの条件を使用してテキストのシーケンスを探します

Chr3is:

私は正規表現を次のようしています。 (([a-zA-Z0-9?]{4,8})(-[a-zA-Z0-9?]{4,8})+-([a-zA-Z0-9?]{4,8}))

どのように私は、少なくとも一桁1つの文字(-ZA-Z)が含まれていない照合シーケンスを避けることができますか?

例えば:

このテキストは: Hello World 123 abc 1AB2C-D3FGH-456I7-JK8LM-NOP9Q Hello World 123 abc 返す必要があります1AB2C-D3FGH-456I7-JK8LM-NOP9Q

この: Hello World 123 abc 11111-1111-1111 Hello World 123 abc

若しくは

Hello World 123 abc aaaa-aaaa-aaaa-aaa Hello World 123 abc

何も返さないはずです。

私はJavaで開発し、このようなグループを取得します:

public List<String> getKeys() {
    keys = new ArrayList<>();
    Matcher matcher = KEY_REGEX.matcher(text);
    while (matcher.find()) {
        keys.add(matcher.group());
    }
    return keys;
}

ありがとう!

第四鳥:

一つの方法は、肯定先読みを使用することで(?=、少なくともAZの発生や数字をチェックするために0-9

発生を一致させるには-、両方を見つけるために先読みして、あなたは文字クラスに追加することができます。

マッチング、あなたはときに一致する文字A-Z0-9を開始し、先頭に追加グループ繰り返し-のない連続発生がないように-していない起動時や終了時に。

\b(?=[A-Z0-9-]*[A-Z])(?=[A-Z0-9-]*[0-9])[A-Z0-9]+(?:-[A-Z0-9]+)+\b
  • \b ワード境界
  • (?=[A-Z0-9-]*[A-Z]) 文字AZアサート
  • (?=[A-Z0-9-]*[0-9]) 桁アサート0-9
  • [A-Z0-9]+ A-Z0-9のマッチ1+出現
  • (?:-[A-Z0-9]+)+A-Z0-9の繰り返しマッチング1+出現-前に追加
  • \b ワード境界

正規表現のデモ

[A-z] 以上一致したより[A-Za-z]


4-8の出現に文字クラスを制限します:

\b(?=[A-Z0-9-]*[A-Z])(?=[A-Z0-9-]*[0-9])[A-Z0-9]{4,8}(?:-[A-Z0-9]{4,8})+\b

おすすめ

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