• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アルファベット+数字に部分マッチする正規表現)

アルファベット+数字に部分マッチする正規表現を教えてください

このQ&Aのポイント
  • 任意文字数のアルファベット+任意桁数の数値で構成された単語にのみ部分マッチする正規表現を教えてください。
  • 条件は、前に数字が無いこと、または、後ろにアルファベットが無いことです。
  • 例えば、23*ade3456,ad-r4+4er3456=pol34k#gtu34&-de23knm723a3 の場合、ade3456, r4, gtu34 にマッチして欲しいのです。4er3456 は手前に数字があるためマッチしません。また、pol34k は後ろにアルファベットが続いているためマッチしません。de23knm723a3 はどこで切っても条件を満たしません。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.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]) という感じです

ggable
質問者

お礼

ありがとうございました。 ”ご説明頂いてすっきりしました”といいたいところですが、 なかなか奥が深くてすっきりするまでには至っておりません。 しかしながら、基本的な考え方も知らなかった私には、 とても勉強になりました。 また、同等な質問を繰り返してしまうかもしれませんが、 今後ともよろしくお願いいたします。 お世話になりました。

その他の回答 (2)

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

こんにちは $_ = "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);

ggable
質問者

補足

ご回答ありがとうございました。 ご指摘の通りでうまくいきました。 私の発想では、手前に数字が無いこと  ?<![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)
回答No.1

こんにちわ。 サクラエディタの機能でちょこっと試してみた程度ですが ([a-zA-Z]+[0-9]+) でいけるのでは? 23*「ade3456」,ad-「r4」+4「er3456」=「pol34」k#「gtu34」&-「de23knm723a3」 になりましたよ

関連するQ&A

専門家に質問してみよう