2011-10-18 4 views
0

私は何百ものRegEx式を入力する必要があるシステムを使用しています。私は最近、いくつかのことを変更しましたし、次のエラー取得しています:私は、これは意味し、本当に私はそれを修正するために探している必要があり何のための任意のポインタをいただければ幸いです何さっぱりだがRegExによるエラー?

java.lang.RuntimeException: ?+* follows nothing in expression

を。

多くの感謝:)

ケイティ

+6

私は良い最初のステップは、エラーの原因となっている実際の正規表現を投稿することだと思う。 – NPE

+0

式の先頭に '?'、 '+'、 '*'があるようです。 –

+0

残念ながらそれは問題です - 私は何百もの表現を持っており、どの人が問題を引き起こしているのかを知ることはできません。私は何を探しているべきかに関するいくつかのヒントを期待していました! – user540298

答えて

0

それはあなたが何を定量化されていない数量詞(+、?、または*)を持っていることを意味します。私の推測では、それにマッチさせようとしたときに、それらの文字のうちの1つ(\)をエスケープするのを忘れたかもしれないということです。

+0

私は問題を発見しました!あまりにも多くのことすべてをありがとう - それは表現の冒頭で*によって引き起こされたもので、私はそれを*に変更しました。そしてすべてが良いです:) もう一度ありがとう! – user540298

+0

あなたはそれを働いてうれしい!あなたは問題を解決するのに役立つ答えを受け入れるべきです –

2

明白な解釈は、'?''+'または'*'メタ文字で始まる正規表現があることです。多分それは脱出されていたはずです。メタキャラクターによって「定量化された」先行するものを誤って削除した可能性があります。

I do have a '*' at the beginning of some expressions - is that bad?

はい。それがリテラルアスタリスク文字と一致するはずであれば、それをエスケープするには、先に'\'を付ける必要があります。 (フェリックスクリングが指摘したように、正規表現リテラルのJava文字列に埋め込まれている場合と、'\'自体はエスケープする必要があります。)それはあなたが正規表現は、その時点で一致させたいかによって異なり

Should I be putting '.*' (ie. dot star) instead?

'.*'は、「熱心に0個以上の文字に一致します」を意味します。それがあなたが意味するものなら、それはあなたが使うべきものです。

+0

Javaで、式が文字列として指定されているので、それをエスケープするために '' \\ ''を使用しなければなりません。 –

+0

多くのありがとうすべて - 私は\ *で始まっているかどうかを確認するために私はトロールされます。私は持っていると思います。代わりに*。(つまりドットスター)を入れておくべきですか? – user540298