• 締切済み

perlでの正規表現について

文字列のなかの"<タグ>(アルファベット1文字)"すべてに対して置換処理をさせたいのですがうまく動作しません。 現在はこう記述しております。 $str=~ s/(~<(.*?)>\w)/置換文字列/g; 良い方法があれば教えていただけると助かります。

  • Perl
  • 回答数6
  • ありがとう数6

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.6

うまく行かないことがあるかも知れませんが ... 。 $str =~ s|(<BR>)(\w+)|$1 . join('', map { $_ . '<wbr>' } split //, $2)|ieg;

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.5

あんまり自信がないのですが、 $str =~ s/((?:<BR>)*\w)((?:<BR>)*)/$1<wbr>$2/g; ではどうでしょうか。 最低 1 文字 <BR> 以外の文字が入っているのが条件です。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.4

No.1 の回答を見落としていました。 もっとよい方法もあるかもしれませんが、 $str =~ s/(<BR>)*(\w)(<BR>)?/$1$2<wbr>$3/g; でどうでしょう。

george723
質問者

補足

回答ありがとうございます。 返答遅れまして申し訳ありません。 これだと<BR>が2つ以上続いた場合に<br><b<wbr>r<wbr>>となってしまいます。 これを参考にして考えてみましたが、どれもうまくいきませんでした。 もう少しだけお知恵を貸していただけませんでしょうか。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

< の前に入っている ~ は、タイプミスですか。 ~ を取った $str=~ s/(<(.*?)>\w)/置換文字列/g; で、うまくいきますよ。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

元の質問の「<タグ>」はどこに消えたんでしょうか? したいことを正確に書いてください.

george723
質問者

補足

すみません あまり考えがまとまらないうちに投稿してしまったので質問内容が不明瞭となってしまいました 質問1の補足に本当にやりたいことを書きましたのでよろしくお願いいたします。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

~がいらないのでは? $str=~ s/(<(.*?)>\w)/置換文字列/g;

george723
質問者

補足

すみません質問を正しく書けていませんでした 今やりたいことは、"(アルファベット1文字)"すべてを"(アルファベット1文字)+<wbr>"に置き換えたいのですが、改行を<BR>に変換した文字列を検索した際に、"<<wbr>B<wbr>R<wbr>><wbr>"になってしまうからです。

関連するQ&A

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

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

    • ベストアンサー
    • Perl
  • 正規表現での$1や$2の使用方法

    正規表現の置き換え文字列部分で使用できる$1や$2の使用方法を教えてください! 以下のソース1のようにs///gの置き換え文字列部分に$1や$2を直接記述すれば、1つ目と2つ目のマッチ部分で置換が行われるのは確認しました。 しかし、ソース2のように置き換え文字列部分を変数に代入したのち、使用すると、正しく置換が行われません。 $1や$2を含んだ置き換え文字列を変数に持っている状態で、ソース1と同じ結果を得るにはどうしたらよいか、ご存知でしたら教えて下さい。 ############################## # ソース1 ############################## #!/usr/bin/perl $data = '1234567'; $ptn = '(\d{3})(\d{4})'; $data =~ s/$ptn/$1-$2/g; ############################## ↓ $dataは123-4567となる。 ############################## # ソース2 ############################## #!/usr/bin/perl $data = '1234567'; $ptn = '(\d{3})(\d{4})'; $str = "$1-$2"; $data =~ s/$ptn/$str/g; ############################## ↓ $dataは-となる。

    • ベストアンサー
    • Perl
  • JavaScriptの正規表現/?<.+?>/について

    strからHTMLのタグを取り除いた文字列をxにしまうため var x=str.replace(/<.+?>/g,""); を使うそうですが /<.+?>/g をなぜ使うのかが分かりません /<.+>/g がまずいのは分かりますが・・・・ 教えていただければ幸いです

  • ''で囲まれていない文字列にマッチする正規表現

    下記のような文字列($str)に対して置換を行い、 my $str = qq{ AAA = BBB - 'CCC' }; $str =~ s/★正規表現★/sprintf("DDD(%s)",$1)/xmsge ; 変換後 $str = DDD(AAA) = DDD(BBB) - 'CCC' ; を実現する★正規表現★を書きたいと思っています。  ・AAA,BBB,CCCは[\w]で構成される文字列です。 ですが、シングルクォーテーション('')で囲まれていない文字列にマッチする正規表現が書けなく困っています。 一度、シングルクォーテーションで囲まれているものも含めて全てDDD()をつけて、そのあとで、シングルクォーテーションを含むものは元に戻すことでやりたいことは実現できているのですが、1行で実現できる方法を探しています。 アドバイスよろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlで使える正規表現を教えて下さい。

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

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

    タグで囲まれた文字列以外に含まれるアルファベットに一致させたいのですがうまくいかず困ってます。 例えば以下のようなHTMLの文字列があったとします。 ---------------------------------------------------------------------------- PHP: Hypertext Preprocessorとは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。<br> 詳しくは以下のURLを参照されたし。<br> <a href="http://ja.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor">リンク</a> ---------------------------------------------------------------------------- "PHP: Hypertext Preprocessor"と"URL"と"HTML"の部分だけに一致させて <br>や<a>などタグで囲まれた部分に含まれるアルファベットや記号には一致しないようにしたいのです。 いろいろ試してみましたが、どうにもうまくいきません。 どなたかお助けください><

    • ベストアンサー
    • PHP
  • Perl 正規表現に関して

    現在Perlにて正規表現を用い,アクセス者のログが納めてあるlog.datからデータを検索し集計するといったアルゴリズムです. ところが正規表現を用いたのは良いものの,アルファベット以外をパターンとして使用したとき,データを呼び出すどころか表示されない状況に陥ってしまいました. elsif($referer =~ /abcd/i) { $word2 = "abcd"; } 上記のコードは,パターンがアルファベットで構成されているため,正常にシステムが動作します. elsif($referer =~ /あいうえ/i) { $word2 = "あいうえ"; } しかし,上記のコードはパターンが平仮名で構成されているため,冒頭で記している問題が発生してしまいます. そこで (1)パターンにアルファベット以外のものは使えるのか. (2)パターンにアルファベット以外のものを使いたいときはどうすればいいのか. についてお教えください. また正規表現のほかに,文字列を検索し,頻度をカウントすることに長けているコードがございましたらお教え願います. 以上の内容で不明な点等ございましたら随時対応致します. 宜しくお願いします.

    • ベストアンサー
    • Perl
  • Javascriptでの正しい文字置換方法

    Javascriptのサンプルなどで置換処理は A→Bの置換を行う場合 文字列をAで配列に分割してそれをB区切りに連結するという方法を使っているのを見かけるのですが納得いきません。 Perlで書いた場合、こんな感じの処理ですね。 $str = join("B",split(/A/, $str)); もう少し正直に $str =~ s/A/B/g; に該当するような正しい記述は無いものでしょうか?

  • 正規表現でスパム投稿をブロックしたい

    現在↓このような正規表現でアルファベット及び記号をブロックし、なるべく日本語が含まれていないと、スパム扱いになるよういしました。 //SPAMフィルター function mb_check($str){ if(ereg("^[\x41-\x5A|\x61-\x7A|\x30-\x3F|\x21-\x2F|[:space:]]+$",$str)){   return False;  }else{   return True;  } } しかし、これでも、スパム書き込み来ることがあるので、 これにあらたに ”httpという文字列が含まれていたら”という条件を 足すことにしました。 しかし、その記述の方法がよく分かりません。 これに、”httpという文字列が含まれていたら”とういう条件を足すには どのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • ["]でくくられた文字列内に存在する[,]をsedで処理する正規表現について

    PostgreSQLを使うのは初心者です。 csvファイルよりCOPYコマンドを使ってPostgreSQLのテーブルにデータを入れようとしています。 もとになるcsvファイルは、データの区切りは[,]であり、文字列は["]でくくられ、さらに["]でくくられた文字列には[,]が存在します。 <csvデータ例> 123,"aaa","b,cde",234 いろいろ調べてみた結果、COPYコマンドを実行する前に、sedコマンドで正規表現を用いて置換をすればよいとの結論にたどり着いたので、 (1)["]でくくられた文字列内の[,]を[#]に置換する  → [123,"aaa","b,cde",234] => [123,"aaa","b#cde",234] に置換したい (2)["]を除く(sed 's/\"//g')  → [123,"aaa","b#cde",234] => [123,aaa,b#cde,234] に置換したい (3)[,]をtabに置換する(sed 's/,/\t/g')  → [123,aaa,b#cde,234] => [123 aaa b#cde 234] に置換したい (4)[#]を[,]に置換する(sed 's/#/,/g')  → [123 aaa b#cde 234] => [123 aaa b,cde 234] に置換したい を順番に行う処理を考えていますが、(1)で記述する正規表現がわかりません。 正規表現も初めて扱う初心者ですので、色々試してみましたが、うまく置換できません。 どなたかご教授の程をお願いします。 なお環境は、RedHatLinux9 + PostgreSQL-7.4.9です。 以上、宜しくお願い申し上げます。

専門家に質問してみよう