2017-07-05 21 views
0

パターンが[0-9]*のフィールドの式があり、数字の後に*が続きます。 0123*****。しかし、同じ表現に*****0123のパターンも含めたいと思います。どのように私はjavaでそれを行うことができます。私が正しく理解していた場合正規表現のパターン式

String numericPattern = "[*0-9]"; 
+0

正規表現では意味がありません。 '[0-9] *'は任意の桁数を意味します。 – ClasG

+0

*は、「任意の数」を示すためにRegExで使用されるワイルドカードです。*文字とマッチさせたい場合は、/で始めることでエスケープする必要があります。したがって、/ *は*文字と一致します。/**は任意の数の*文字と一致します。あまり混乱しない!またはそれは? – khriskooper

答えて

1

を次のように今、それは、あなたが、少なくとも一桁(\d+)が続くアスタリスクの任意の番号(\**)を、意味

^\**\d+\**$ 

をしたいです(0を含む)任意の数のアスタリスク(\**)。 *は、正規表現の特殊文字(の前の任意の文字/クラス/グループを意味する)であるため、でエスケープして、*と一致させる必要があります。

行の先頭(^)と行の終わり($)アンカーマッチしたパターンが存在するが、何もを確保していません。 Javaであなたががバックスラッシュをエスケープする必要がありますので、あなたが

String numericPattern = "\\**\\d+\\**"; 

See an example here at regex101のようなもので終わるべきであること

は注意してください。

+0

私は彼女が前後に少なくとも1つのアスタリスクを強制したいと思います。これは1桁の数字と一致します。 – Michael

+0

@Meenalあなたはあなたが得た答えに何かコメントしていますか? – ClasG

+0

@ClasG私は実際にこのように動作させました[0-9 *] * –

0

私は、これはあなたが欲しいものだと思う:

(\*+\d+)|(\d+\*+) 

は、それを破壊:

(\*+\d+) 

リテラルアスタリスク\* 1回以上の数字が続く+\d一つ以上を回+

| 

又は

(\d+\*+) 

桁リテラルアスタリスク\*一回以上+続い\d一回以上+ClasGとして


あなたのパターンは次のようになりますので、あなたは、Javaでスラッシュをエスケープする必要があります、言った:スター文字は、正規表現での数量詞である

String numericPattern = "(\\*+\\d+)|(\\d+\\*+)"; 
0

。あなたが文字通り星のキャラクターを意味するなら、それをエスケープする必要があります。次の式は、1つ以上の星の後に1つ以上の暗号または1つ以上の暗号が続き、1つ以上の星が続くことを許可します。

Pattern p = Pattern.compile("(\\*+[0-9]+)|([0-9]+\\*+)");