- ベストアンサー
アルファベット+数字に部分マッチする正規表現を教えてください
- 任意文字数のアルファベット+任意桁数の数値で構成された単語にのみ部分マッチする正規表現を教えてください。
- 条件は、前に数字が無いこと、または、後ろにアルファベットが無いことです。
- 例えば、23*ade3456,ad-r4+4er3456=pol34k#gtu34&-de23knm723a3 の場合、ade3456, r4, gtu34 にマッチして欲しいのです。4er3456 は手前に数字があるためマッチしません。また、pol34k は後ろにアルファベットが続いているためマッチしません。de23knm723a3 はどこで切っても条件を満たしません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。No.2のものです コツとしては 「ほしいものを厳密に表現しましょう」 です。 ggable様の考える、「任意文字数のアルファベット+任意桁数の数値で構成された単語」は [a-zA-Z]+[0-9]+ ではなく、 (?<![a-zA-Z])[a-zA-Z]+[0-9]+(?![0-9]) であることが、サンプルから読み取れました。 これに2つの条件を加えまして・・・ (?<![0-9])(?<![a-zA-Z])([a-zA-Z]+[0-9]+)(?![0-9])(?![a-zA-Z]) このままでもいいのですが、まとめてすっきり、 (?<![0-9a-zA-Z])([a-zA-Z]+[0-9]+)(?![0-9a-zA-Z]) という感じです
その他の回答 (2)
- moon_piyo
- ベストアンサー率60% (88/146)
こんにちは $_ = "23*ade3456,ad-r4+4er3456=pol34k#gtu34&-de23knm723a3"; @a = /(?<![0-9a-zA-Z])([a-zA-Z]+[0-9]+)(?![0-9a-zA-Z])/g; print join("\n", @a);
補足
ご回答ありがとうございました。 ご指摘の通りでうまくいきました。 私の発想では、手前に数字が無いこと ?<![0-9] と、後ろにアルファベットが無いこと ?![a-zA-Z] を組み合わせて、 (?<![0-9])([a-zA-Z]+[0-9]+)(?![a-zA-Z]) で、うまくいくと思っていたのですが... どういう風に考えれば、 ?<![0-9a-zA-Z] ?![0-9a-zA-Z] という条件を発想できるのでしょうか? ご指導頂ければ幸いです。
- KDASH-XP
- ベストアンサー率45% (62/135)
こんにちわ。 サクラエディタの機能でちょこっと試してみた程度ですが ([a-zA-Z]+[0-9]+) でいけるのでは? 23*「ade3456」,ad-「r4」+4「er3456」=「pol34」k#「gtu34」&-「de23knm723a3」 になりましたよ
お礼
ありがとうございました。 ”ご説明頂いてすっきりしました”といいたいところですが、 なかなか奥が深くてすっきりするまでには至っておりません。 しかしながら、基本的な考え方も知らなかった私には、 とても勉強になりました。 また、同等な質問を繰り返してしまうかもしれませんが、 今後ともよろしくお願いいたします。 お世話になりました。