2011-01-13 26 views
0
"^[\\s]*DISPLAY.*?(\".*?\").*?\\." 

私は上記の正規表現を持っています。しかし、私はそれに問題があります。Java正規表現のヘルプ

DISPLAY AC-YEAR LINE 2 POSITION 68 REVERSE. 

この文字列は、必要に応じてキャプチャされません。

DISPLAY "EATING.FOOD" LINE 13 POSITION 31 REVERSE. 

これは正常に取得されます。

正規表現をどのように書くべきかわかりません。

"^[\\s]*DISPLAY.*?(\".*?\") *,?,??  .*?\\. 

)の後に数量詞を入れても機能しません。それはグループを捉えていない。

答えて

2

正規表現は、DISPLAYワードの後に​​存在引用符( ")のペアを必要としています。最初のものは動作しない理由です。

あなたはDISPLAY DISPLAY間(すべての後の最初の非空白の単語をしたい場合そして、LINE、これは動作するはずです:(\".*?\")は、あなたの文字列ではありませんwhicxh開始quotにと終了quotに間に何かを、一致するので

^[\\s]*DISPLAY\\s*?(\".*?\"|.*?)\\s*?LINE.*?\\. 
+0

働きました!しかし、私は線を正規表現にしたくない...それはドットを見つけるときに終わるべきである。 (\\。)が引用符で囲まれていません。 – GorillaApe

+0

この 'AC-YEAR LINE 2 POSITION 68 REVERSE 'の場合、AC-YEAR LINE 2 POSITION 68 REVERSEに一致する必要がありますが、' DISPLAY' EATING.FOOD "LINE 13 POSITION 31 REVERSE"に一致する必要があります。 「食べ物」だけ? –

+0

私は全体のものに一致する必要があります。 DISPLAYからドットにマッチします。これは簡単ですが、ドットが引用符で囲まれていれば、式の終わりとはみなされません! – GorillaApe

0
を、あなたの正規表現をテスト示唆しています。

これはライン全体のマッチングながら、AC-YEARおよび「EATING.FOOD」をキャプチャするために動作するはずです:

^\\s*DISPLAY\\s(.*?)\\s.*\\.$ 

注$は、行の末尾にマッチするので、文字通りドット\\.のみで照合されることを終わり。

あなたが表示された後、すべてをキャプチャしたい場合は、これはそれを行う必要があります。

^\\s*DISPLAY\\s(.*?)\\.$