パターンが[0-9]*
のフィールドの式があり、数字の後に*
が続きます。 0123*****
。しかし、同じ表現に*****0123
のパターンも含めたいと思います。どのように私はjavaでそれを行うことができます。私が正しく理解していた場合正規表現のパターン式
String numericPattern = "[*0-9]";
パターンが[0-9]*
のフィールドの式があり、数字の後に*
が続きます。 0123*****
。しかし、同じ表現に*****0123
のパターンも含めたいと思います。どのように私はjavaでそれを行うことができます。私が正しく理解していた場合正規表現のパターン式
String numericPattern = "[*0-9]";
を次のように今、それは、あなたが、少なくとも一桁(\d+
)が続くアスタリスクの任意の番号(\**
)を、意味
^\**\d+\**$
をしたいです(0を含む)任意の数のアスタリスク(\**
)。 *
は、正規表現の特殊文字(の前の任意の文字/クラス/グループを意味する)であるため、でエスケープして、*
と一致させる必要があります。
行の先頭(^
)と行の終わり($
)アンカーマッチしたパターンが存在するが、何もを確保していません。 Javaであなたががバックスラッシュをエスケープする必要がありますので、あなたが
String numericPattern = "\\**\\d+\\**";
See an example here at regex101のようなもので終わるべきであること
は注意してください。
私は、これはあなたが欲しいものだと思う:
(\*+\d+)|(\d+\*+)
は、それを破壊:
(\*+\d+)
リテラルアスタリスク\*
1回以上の数字が続く+
\d
一つ以上を回+
。
|
又は
(\d+\*+)
桁リテラルアスタリスク\*
一回以上+
続い\d
一回以上+
。 ClasGとして
あなたのパターンは次のようになりますので、あなたは、Javaでスラッシュをエスケープする必要があります、言った:スター文字は、正規表現での数量詞である
String numericPattern = "(\\*+\\d+)|(\\d+\\*+)";
。あなたが文字通り星のキャラクターを意味するなら、それをエスケープする必要があります。次の式は、1つ以上の星の後に1つ以上の暗号または1つ以上の暗号が続き、1つ以上の星が続くことを許可します。
Pattern p = Pattern.compile("(\\*+[0-9]+)|([0-9]+\\*+)");
正規表現では意味がありません。 '[0-9] *'は任意の桁数を意味します。 – ClasG
*は、「任意の数」を示すためにRegExで使用されるワイルドカードです。*文字とマッチさせたい場合は、/で始めることでエスケープする必要があります。したがって、/ *は*文字と一致します。/**は任意の数の*文字と一致します。あまり混乱しない!またはそれは? – khriskooper