質問: 正規表現に関する質問です。 ■概要 「そうですねabcの次はdefですね笑」 上記文章のdefにマッチさせる正規表現文字列をご教授下さい。 ■ロジック 「***笑」の「***」の中に存在する「最後の」半角英数文字を取り出したい。 ■現在の正規表現文字列 "([0-9a-zA-Z!-~]+)(.*)(笑)" ■現在の正規表現文字列に対するマッチ結果 マッチ文字列 : abcの次はdefですね笑 マッチ文字列グループ1 : abc マッチ文字列グループ2 : の次はdefですね マッチ文字列グループ3 : 笑 ■質問内容 上記グループのいずれかにdefが該当するような 正規表現文字列を教えて下さい。 ポイントは「最後の」です。
回答: ``` ([0-9a-zA-Z!-~]+)[^0-9a-zA-Z!-~]*笑 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ``` ですかね。 1番目で、文字クラスに指定された文字の1文字以上の繰り返しにマッチします 2番目で、文字クラスに指定された文字*以外*の0文字以上の繰り返しにマッチします。 なお、`[0-9a-zA-Z!-~]`は`[!-~]`と省略できます。 \wを使用する回答が複数ついていますが、\wはアンダーバー以外の記号にはマッチしませんので、質問の`[0-9a-zA-Z!-~]`が意図する文字は正しくマッチしません