• 締切済み

正規表現の使い方

$input =~ s/[a-z][0-9]-[0-9]/ [a-z][0-9]-[0-9] /g; perl言語での正規表現についてです。 置換に関してなのですが、このような使い方はできないでしょうか?? [a-z][0-9]-[0-9]にヒットしたものの前と後ろにスペースを代入したいのですが、何かいいプログラミングはないでしょうか?

  • Perl
  • 回答数3
  • ありがとう数4

みんなの回答

回答No.3

#usr/bin/perl my $foo = 'hiada1-6fihoaidu5-6'; $foo =~ s/([a-z]\d-\d)/ $1 /g; print $foo; #-> hiad a1-6 fihoaid u5-6

sy1212
質問者

お礼

返信が遅れてしまい申し訳ありませんでした。 問題解決できました! 回答頂き、ありがとうございました!

noname#108740
noname#108740
回答No.2

$input =~ s/[a-z][0-9]-[0-9]/ $& /g;

sy1212
質問者

お礼

回答ありがとうございます! 問題を解決することができました! 誠にありがとうございます!

  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.1

$input =~ /([a-z][0-9]-[0-9])/; $output = " $1 "; ($1の前後にスペース) これでどうでしょう?

sy1212
質問者

お礼

解答ありがとうございます!! 質問が悪くて申し訳ありません! ヒットした文字列の前後にスペースをいれて抽出したいのではなく、適当な文字列(例えば、hiada1-6fihoaidu5-6…)中の[a-z][0-9]-[0-9](この場合a1-6とu5-6)の前後にスペースをいれた形で出力したいんですが… 頭悪くてすいません!!

関連するQ&A

  • Perlで使える正規表現を教えて下さい。

    Perlで使える正規表現を教えて下さい。 半角英語で、小文字が3文字以上続いた後、大文字が来る場合、その大文字の右にスペースを入れる。 これをPerlで使える正規表現を教えて頂けないでしょうか? 例 $str = 'AaaAaaaBbbbbCccccDddBbA'; # Aaa Aaaa Bbbbb Ccccc DddBbA ちなみに、色々ネットで調べて試してみて、 $str =~ s/([a-z])([A-Z])/$1 $2/g; が最も近いコードになったのですが、2文字続いただけでもスペースが入り困っています。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 英単語が誤って空白で区切られたのを正規表現で除く

    英語の文章を紙媒体からスキャンして電子化しました。その際に、斜体が含まれていたり、何らかの事情で英単語がスペースで区切られてしまっている場合があります。これを取り除くのが最終的な目的です。例えば I l o v e New York. といったようにです。 正規表現による置換での処理をまず思いつき、 置換前 スペース[a-z]スペース 置換後 スペース[a-z] としてみたら、[a-z]に当たる部分が置換後には元の文字から[a-z]となってしまい、あいまい検索でヒットしたのはよいものの、置換後は元の文字を維持してくれませんでした。   第一の質問として、[a-z] や [0-9]といった表現を含む置換の場合、元の文字をそのままに、それ以外の部分を置換することは可能なのでしょうか? 第二に、I l o v e New York. を I love New York. とするにはどうしたら良いのでしょうか?処理が完全でなくても、以前よりも読みやすくなれば構いません。 よろしくお願いします。

  • Perl正規表現わかりますか?

    下記のPerl正規表現ですが、どんな意味か分かるでしょうか? $var =~ s!/([^/]+|~(\.\.))/\.\./!/!g 参考書も読んでみたのですが分かりませんでした(セットされている文字列にどんなマッチング、置換をしているのでしょう) お分かりの方いれば、よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlの正規表現に関する質問です。

    Perlの正規表現に関する質問です。 下記を実行した場合、$1~・・・には下記のどの正規表現に該当する値が入るの でしょうか? sub test{ my $text = shift; pos($$text) = undef; while ( $$text =~ m{ (\s*<) ( !-+ | !-+\s*(/|//)?\s*(.*?)\s*(/|//)?\s*-+ | (/)?([!a-z0-9\-]+)\s*((?:[a-z0-9\-]+\s*=\s*[\w\-/]+|[a-z0-9\-]+\s*=\s*".*?"|[a-z0-9\-]+\s*=\s*'.*?'|\s+[^<>]{2,})*)?\s*(/)? ) (>\s*) (.*?(?=(?:<!-+ | </?[a-z0-9\-!]+\s*(?:[a-z-]+\s*=\s*[\w\-/]+|[a-z0-9\-]+\s*=\s*".*?"|[a-z0-9\-]+\s*=\s*'.*?'|\s+[^>]{2,})*)\s*(/)?>?))? }sxgi ) { ・・・ }

    • ベストアンサー
    • Perl
  • 正規表現について教えてください。

    Perlとは関係ないのですが、正規表現での置換ができるエディタで改行二つを一つにしたいです。 置換前 \n\n 置換後\n としてみたのですがうまくいきません。まちがってたら教えてください。 CRLFとか気にしないといけないのかな。

    • ベストアンサー
    • Perl
  • Perlの正規表現

    Perlの正規表現で質問です。 例えば、 "aabbccddee"と"cdde"という2種の文字列があるとして"cdde"だけを検索(または置換)したい場合の正規表現ってどのようにすればよいのでしょうか? いま、"cdde"で検索すると"aabbccddee"と"cdde"の2種類がヒットしてしまうのですが"cdde"だけヒットするような正規表現をどなたかご教示ください。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現を教えて下さい(テキストエディタでの置換)

    いつもお世話になっております。 正規表現に関して細かい質問をさせて下さい。 例えば、G-01,T-02,F-05とあったときに、 これを、01,02,05としたいとき、 正規表現の置換で「[A-Z]-[0-9][0-9]」→「[0-9][0-9]」とすると、 "[0-9][0-9]"という文字列だけ残ってしまいます。 既存の文字列をそのまま残すにはどのようにしたらよいでしょうか? ※テキストエディタでの置換に関してです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現について

    例えば sample( 34 ,12 );みたいな関数があって、それを丸ごと置換ダイアログで消したいのですが、 (引数は任意で、間にスペースがあったりなかったりする) 正規表現の使い方がいまいちよく判りません。 検索文字列を ”sample(":z,:z");” <-全然自信無し。 としてもやっぱりヒットしませんでした。 どうすればよいか教えてください。 正規表現のチェックボックスはオンにしてあります。

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • VB2008 正規表現 うまくいきません [ ]?

    VB2008にてプログラムを組んでいます。 RichTextBox に英文を流し込んでありますが、それに対して英単語を検索して、ハイライトするプログラムを組んでいます。 しかし、正規表現の表現方法が悪くうまく検索してくれません。 例えば、RichTextBox には次のような英文があります。 I have seen many chavette. 上記英文に対して、下記のような正規表現で検索しているのですが、 [ -]?have[ s,-]? "have s"がヒットしてしまいます。 その他、chavetteという単語も回避したいのにヒットしてしまいます。 どのように正規表現を訂正すればよいでしょうか。 ================================== 【have の前に"[ -]?"をつけた理由】 "chavette" のような単語を回避し、 "abc-have" のような単語や " have" のような前にスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。 【have の後ろに"[ s,-]?"をつけた理由】 "have-had-had" のような文字列や "haves" のようなsがつく単語や "have," のようなカンマつきの単語や "have " のような後ろにスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。

専門家に質問してみよう