0

次の形式になる一連の文字列を処理します。

"2*salary"
"salary+2"
"2*salary/3"

私の目標は「給料」だけを引き出すことです。ただし、変数名として文字と数字が混在する「2 * id3」のようなものがある可能性があるため、文字以外を排除したくありません(注:すべてが数字になることはありません)。私は現在使用しています:

Pattern pattern = Pattern.compile("[\\w_]+");

ただし、「2*salary」などの場合、「2」と「salary」が検出されます。

4

2 に答える 2

3

あなたはおそらくこれを探しています:

Pattern.compile("[a-zA-Z]\\w+");

... つまり、文字で始まる一連の文字に一致します。これは「salary」には一致しますが、「2」には一致しません (「2salary」にも一致しません)。

実際に一致させる必要がある場合は2salary、これを使用します。

Pattern.compile("[0-9]*[A-Za-z]\\w+");

[\w_](私はjustに置き換えまし\wた。実際にはアンダースコアが含まれています)。

于 2013-09-29T21:32:24.630 に答える
0

これは、2*salary が [a-zA-Z0-9_] である「単語」文字定義 \w の 2 倍に一致するためです。

あなたの場合、「[a-zA-Z][\w]*」のようなものが必要です

于 2013-09-29T21:36:20.970 に答える