• ベストアンサー

正規表現:頭文字以外小文字に変換

長い間自分で考えたのですが、分からずに困っています。ご存知の方がおられましたらご教授ください。 Dreamwaver MX2004を使用しています。 「検索および置換」機能を利用してHTMLファイルに全て大文字のアルファベットで記載されている単語を各単語の頭文字以外小文字に変換したいのです。検索窓には「(\b[A-Z]+\b)」と入力すると全て大文字の単語が検索できました。問題はどのような正規表現を「置換」窓に入れればよいのでしょうか? 不可能な場合は、その旨をお伝え下さい。 よろしくお願いします。

  • bbrc
  • お礼率78% (304/388)

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.7

画像をあげて置きます。  これは、すべての英単語を[大文字1文字+その他小文字]に置換します。大文字ばかりを含む場合は、違いますよ。

bbrc
質問者

お礼

ORUKA1951さん ご回答、ありがとうございました。 EmEditor( http://jp.emeditor.com/ )Pro版で、できました。 ([A-Z])([A-Z]*) を入力し、置換窓に \U\1\L\2

bbrc
質問者

補足

ORUKA1951さん ご回答、ありがとうございました。 DWではやはりだめでしたが、EmEditor( http://jp.emeditor.com/ )Pro版では上記で動作しました。 テストファイルで試したので、明日、正規のファイルを置換してみます。 とりあえず、何とかなりそうですが。

その他の回答 (6)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.6

置換窓 $1\L$2\E 及び \1\L\2\E で試しました。 結果は、まったく何も置換されません。 じゃなくて、No.1で示したように ([a-zA-Z])([a-zA-Z]*) を入力し、置換窓に \U\1\L\2 です。  もちろん ([A-Z])([A-Z]*) を入力し、置換窓に \U\1\L\2 でも構いません。前者は小文字だけも置換してくれます。  スイッチは前に書かないと・・・見られたらわかるように  ^^^^^^^^^^^^^^^^^^^^^^^^^ 置換窓 $1\L$2\E 及び \1\L\2\E では変化しません。・・ 何度も言いますが、\U が大文字、\Lが小文字です。uperとlowerですから・・・ いささか、「慌てんぼう」なのかな?。むやみやたらに試すのではなく、理解して試さないと身につきません。  ひょっとして、DWでもちゃんと書けば動くのかも・・

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

正規表現による置換ができるアプリケーション、言語でも、大抵は、「変換前の一部を使って、順番を入れ替えたりできる」程度で、「一部を加工して置換できる」ものはそんなに多くはありません。 また、既に指摘があるように、そのアプリ毎に正規表現は違いますので、サンプルコードがあったら、それが何用か、自分が使いたいツールではどんな表現に該当するのか(あるいは、該当するものが無いのか)を調べる必要があります。 Dreamweaverは使ってないので正確にはわかりません。 検索側の()は対応する$1,$2で参照できるようですが \U,\u,\L,\lによる大文字小文字変換が無い、あるいは、別の方法を使う必要があるのでは無いでしょうか? ここまで悩んでいるなら、変換に対応している別のアプリで変換するのが早いと思います。

bbrc
質問者

補足

kmeeさん ご回答、ありがとうございました。 変換に対応している別のアプリでためしているではないですか。 私は、Peggyでも試しましたしEmEditor( http://jp.emeditor.com/ )Pro版でも試しました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

>検索窓 >\b([A-Z])([A-Z]*) > >置換窓 >$1\L$2\E >で試しました。  ということは、後方参照はできています。(最初のパターン)(二番目のパターン)  \bが必要か否かはわかりません。ないほうがよいような--\bは一般的に単語境界に使われますが、日本語中に空白無しでアルファベットが続いているとマッチしないかも  いずれにしても \b([A-Z])([A-Z]*) →$1続く文字($2) だと、 「AFGHANISTAN」が「A続く文字(LFGHANISTAN)」 になることは推測できますね。 ちょっと調べてみたのですが、大文字を小文字に変換するスイッチは見つかりませんでした。  大文字はupper case、小文字はlower caseなので、\U,\Lが一般的なテキストエディタではそのスイッチになります。 ★EmEditor( http://jp.emeditor.com/ )でPro版をダウンロードして、置換してみてください。方法はNo.1で示しました。  一ヶ月の試用期間があります。Free版( http://jp.emeditor.com/modules/download2/rewrite/tc_5.html )ではこの置換は使えません。

bbrc
質問者

補足

EmEditor( http://jp.emeditor.com/ )Pro版で試してみました。 検索窓 \b([A-Z])([A-Z]*) 置換窓 $1\L$2\E 及び \1\L\2\E で試しました。 結果は、まったく何も置換されません。「AFGHANISTAN」が「AFGHANISTAN」のままです。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

正規表現は様々な書式があります。私が示したのは、ごく一般的な方法です。 意味を理解していないと。 \bは通常単語境界を示します。 []で括られた部分は範囲を示します。a,b,c,dと書く代わりにa-d ()は後方参照のためのものです。 *は0文字以上 +は1文字以上 ?を付けると最小マッチ 単語境界が明確かどうかわからないので、私は [a-zA-Z]としましたが、大文字だけなら[A-Z}ですが、これは問題にはならないはずです。 なぜなら、次に後方参照で()を前から順番に\1,\2としていますから・・ ([A-Z])([A-Z]*) でよいですが、すべての英単語ならa-bも含めてください。 後方参照が利かないのは、エスケープが有効になっていない可能性、後方参照の記号が異なる。たとえばperlでしたら$1,$2,$3ですよね。  また、DWに、大文字/小文字の切り替えスイッチが実装されていないなら、変換はできないでしょう。そのあたりはDWの正規表現のマニュアルをご覧ください。

bbrc
質問者

補足

ORUKA1951さん ご回答、ありがとうございました。 検索窓 \b([A-Z])([A-Z]*) 置換窓 $1\L$2\E で試しました。 結果は、「AFGHANISTAN」が「A\LFGHANISTAN\E」となりました。 Peggyというエディターでも試しましたが、うまくいきません。

回答No.2

DWは私もよく知りません。 正規表現はアプリによってエスケープする文法などが若干違いますので 確実とは言いませんが。 それと 日本語対応のアプリでは エスケープ文字は\(円記号)ですが 英文アプリは バックスラッシュだったりしますのでそのあたりは 自分で確認ください。 私が使っているのはフォルダ内の複数のファイルも一発で検索置換可能な Devasというフリーウェアです。 以下説明です。 全部大文字の単語を検索する場合の正規表現: \b([A-Z])([A-Z]*) ()はその中をグループ化して置換文字列で参照する記号です。 ですので()を2つ使うことで 頭文字とそれ以降の大文字を区分します。 置換文字列 \1\L\2\E \1 は最初の()内を参照します:頭文字の大文字 > そのまま出力 \L はその後に続く文字列を\Eまで小文字にします \2 は2番めの()内を参照します(頭文字以降の大文字列) > 小文字に変換されて出力 という感じになるはずです。 Devas: http://gimite.net/pukiwiki/index.php?Devas

bbrc
質問者

補足

creative_sosoさん ご回答、ありがとうございました。 \b([A-Z])([A-Z]*) は、DWでちゃんと動作しました。 \1\L\2\E は、動作しません。置換ボタンを押すと、置換されずに単語がそのまま「\1\L\2\E」へ変わりました(例:AFGHANISTAN→\1\L\2\E)。 だれかDWをやっている人いないですか?

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

DWの正規表現は使った経験がありませんが・・ ([a-zA-Z])([a-zA-Z]*) → \U\1\L\2 ([a-zA-Z])          ([a-zA-Z]*) アルファベット1文字 それに続くひとつ以上のアルファベット

bbrc
質問者

補足

ORUKA1951さん ご回答、ありがとうございました。 よく分かりませんが、ORUKA1951さんの正規表現ではちゃんと動作しません。 DWのメニューバーの「編集」にある「検索 / 置換」の検索窓に ([a-zA-Z])([a-zA-Z]*) を入力し、置換窓に \U\1\L\2 を入力して検索及び置換してみました。 私が検索したいのは「全て大文字のアルファベットで記載されている単語」(例:AFGHANISTAN)ですが、 ([a-zA-Z])([a-zA-Z]*) だと小文字が含まれる単語(例:Afghanistan)も検索されてしまいます。 次に、 ([a-zA-Z])([a-zA-Z]*) で「全て大文字のアルファベットで記載されている単語」(例:AFGHANISTAN)を選択(ハイライト)し置換ボタンを押すと、置換されずに単語がそのまま「\U\1\L\2」へお変わりました(例:AFGHANISTAN→\U\1\L\2)。 私の要望だと「AFGHANISTAN」を「Afghanistan」へ置換したい。 どなたか解決方法をご存知の方いますか?

関連するQ&A

  • 困ってます:頭文字以外小文字に変換

    長い間自分で考えたのですが、分からずに困っています。ご存知の方がおられましたらご教授ください。 Dreamwaver MX2004を使用しています。 「検索および置換」機能を利用してHTMLファイルに全て大文字のアルファベットで記載されている単語(国名)を各単語の頭文字以外小文字に変換したいのです。検索窓には「(\b[A-Z]+\b)」と入力すると全て大文字の単語が検索できました。問題はどのような正規表現を「置換」窓に入れればよいのでしょうか? 不可能な場合は、その旨をお伝え下さい。 よろしくお願いします。

  • 正規表現

    お世話になります。正規表現の質問です。 \w に当たる文字とハイフンに合致するが、少なくとも一文字はアルファベット(a-z)またはハイフン(-)が含まれていなければならない(つまり、数字だけの文字列は合致しない) という正規表現はどうあらわせばよいでしょうか。 以上、よろしくお願いします。

    • ベストアンサー
    • 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. とするにはどうしたら良いのでしょうか?処理が完全でなくても、以前よりも読みやすくなれば構いません。 よろしくお願いします。

  • 正規表現について

    正規表現について質問をさせていただきます。 VB6.0にて正規表現を使用し、入力された文字のチェックを行っていますが どうしてもうまくいきません。 チェックしたい文字は A(半角アルファベット大文字1文字)または AAA(半角アルファベット大文字3文字)または (AAA)(半角カッコつき半角アルファベット大文字3文字)で 上記3パターン以外はエラーとしたいと思っています。 パターンは下記のように作成したのですが "(^[\(][A-Z]{3}[\)])|(^[A-Z]{1,3})" A、AAA、(AAA)以外でもA(AA)やAAAA等も正常ケースとして通過してしまいます。 パターンをどのように作成すればよいか教えて下さい。 よろしくお願いします。

  • 正規表現の使い方

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

  • 正規表現でパスワードのチェック

    8文字以上で、アルファベット大文字、アルファベット小文字、記号を最低1つずつ含んでいるか、というチェックを正規表現で行いたいと考えています。 以下のようにしているのですが、うまくいきません。間違っているのでしょうか? ^(?=.{8,})(?=[a-z]+)(?=[A-Z]+)(?=[~!#$%^&`*+;:"'?/|{}.=_,-]+).+$ また、使用しているのは、Jakarta-OroのPerl5Utilです。 使用しているライブラリが悪いのでしょうか?

    • ベストアンサー
    • Java
  • 秀丸の正規表現

    秀丸の正規表現 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,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

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

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

    • ベストアンサー
    • PHP
  • Dreamweaver MX 2004 検索置換を正規表現で 訂正版

    08/11/10 18:40に「Dreamweaver MX 2004 検索置換を正規表現で」という質問をしてますが、質問のないように誤りがありましたので、訂正版のスレッド(本スレッド)を作成します。 Dreamweaver MX 2004を使用しています。 検索は、正規表現で行なえるのですが、置換の入力欄に入力した正規表現がうまく働きません。 例: 検索対象: 「あいうえお」 「かきくけこ」 置換後: <あいうえお> <かきくけこ> 「検索および置換」ダイアログの「検索」入力欄に 「(.+)」(「」も入力) と入力する。 「検索および置換」ダイアログの「置換」入力欄に <\1>(<>も入力) と入力する。 この場合、検索対象はすべて検索されるが、置換ボタンを押すと <\1>(<>も置換後の文字列に含む) と置換されてしまう。 どのようにすれば、正規表現を利用した検索置換が正常に行なえるでしょうか? 詳細な解説が記載してあるサイトのURL等でも結構です。 よろしくお願いします。

  • 正規表現で特定文字に挟まれた範囲内での検索

    VS CODE にて文字列の正規表現で文字列(プログラムではありません)の検索をしたく質問いたします。 (A B C)<A B C> という文字列があり、この中の半角スペースを別の文字に置換したいのですが、全ての空白ではなく( )に挟まれた中の半角スペースだけを検索したいと思っています。 ↑の用な文字列から( )内の半角スペースだけを照らし出す正規表現を教えていただいていただけると嬉しいです。

専門家に質問してみよう