重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

正規表現にて、matchesメソッドを使って配列の中にある末尾の2文字をとって
正規表現したいのですがうまく表示されません。
(すべての表示ではなく、上記の条件です)色々試していますが
教えてください。
hogeには、"焼肉定食","唐揚げ定食","焼魚定食","うどん定食"

if(hoge[0].matches("[定食]")
if(hoge[0].matches("[定食$]")
if(hoge[0].matches("\\p{定食}")
※エラー文Unknown character property name {定食} near index 5
\p{定食}
if(hoge[0].matches("(定食\\d)")
上記は出来ませんでした。
よろしくお願いします。

A 回答 (2件)

あなたが何をマッチさせたいのか解りませんが、あなたが提示されたパターンではすべて hoge[0] に格納された "焼肉定食" にマッチしません。


 if(hoge[0].matches("[定食]") : "定" か "食" にのみマッチ
 if(hoge[0].matches("[定食$]") : "定" 、 "食" 、 "$" のいずれかにのみマッチ
 if(hoge[0].matches("\\p{定食}") : \p{} の括弧の中に書けるのは文字種を表す文字列のみで、 "定食" という文字種はないためエラーとなる
 if(hoge[0].matches("(定食\\d)") : "定食" のあとに一桁の数字が付いた 3 文字の文字列

もし hoge に格納された文字列の中から "定食" で終わるものを抽出するのであれば、その正規表現は .+定食 となるべきで、それゆえコードは
 if(hoge[0].matches(".+定食")
となるべきです。

また、あなたの望みが hoge に格納された文字列のうち "定食" で終わるものの、その "定食" を取り除いた部分を抽出したいのであれば、マッチした文字列から後ろ 2 文字を取り除けばいいだけですし、マッチするかどうかの判定には正規表現ではなく endsWith() メソッドを使った方がコードが読みやすくなります。
http://docs.oracle.com/javase/jp/6/api/java/lang …
それでもどうしてもすべて正規表現で行いたいならば、String のメソッド matches() ではなく、正規表現クラス Pattern のインスタンスを生成し、そのインスタンスの macther() にチェックしたい文字列を渡して結果として Mather クラスのインスタンスを取得し、その Mather クラスのインスタンスの matches() メソッドを呼び出してマッチしたかどうかを確認後、group() メソッドを呼び出して結果を取得してください。このとき、使用する正規表現は (.+)定食 と括弧を追加したものになります。
http://docs.oracle.com/javase/jp/6/api/java/util …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2016/02/21 09:34

文章の意味がわからん. 「末尾の2文字をとって正規表現したい」ってどういうこと?



そして, 「うまく表示されません」というのは, 具体的には「何を期待して実際にはどうだった」んだ?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!