0

これらすべてを一致させようとしています:

{_someWord1} ... $1=someWord, $2=1
{_another82} ... $1=another, $2=82 (item in question)
{_testX}     ... $1=test, $2=X

私の正規表現:{_(\w+)(\d+|X)}は 3 つすべてに一致しますが、2 番目の項目のグループは次のとおりです。

{_another82} ... $1=another8, $2=2

$2に任意の桁数を入れて、単語だけを に保持できるようにしたいと思います$1。なんらかの先を見通す必要がありますか?

4

2 に答える 2

3

ほとんどの正規表現フレーバーでは、貪欲でない繰り返しを使用できます。これは、消費をできるだけ少なくします (デフォルトとは対照的に - 可能な限り):

{_(\w+?)(\d+|X)}

ただし、数字の前の部分に数字とアンダースコア ( に含まれる\w) を含めることができない場合は、より具体的な文字クラスを使用できます。

{_([a-zA-Z]+)(\d+|X)}
于 2013-08-09T16:12:45.790 に答える
1

貪欲でない一致 ( ?afterを追加\w+) を使用して、消費をできるだけ少なくし、それでも一致するようにしてみてください。

{_(\w+?)(\d+|X)}

または、言語 (未指定) がルックアラウンドをサポートしている場合:

{_(\w+)(?<=[a-zA-Z])(\d+|X)}

これは、グループ 1 の最後の文字は文字でなければならないと主張します (ただし、文字はグループ 1 内の他の場所に現れる場合があります)。

于 2013-08-09T16:12:35.977 に答える