- ベストアンサー
正規表現:頭文字以外小文字に変換
長い間自分で考えたのですが、分からずに困っています。ご存知の方がおられましたらご教授ください。 Dreamwaver MX2004を使用しています。 「検索および置換」機能を利用してHTMLファイルに全て大文字のアルファベットで記載されている単語を各単語の頭文字以外小文字に変換したいのです。検索窓には「(\b[A-Z]+\b)」と入力すると全て大文字の単語が検索できました。問題はどのような正規表現を「置換」窓に入れればよいのでしょうか? 不可能な場合は、その旨をお伝え下さい。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (6)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
置換窓 $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)
正規表現による置換ができるアプリケーション、言語でも、大抵は、「変換前の一部を使って、順番を入れ替えたりできる」程度で、「一部を加工して置換できる」ものはそんなに多くはありません。 また、既に指摘があるように、そのアプリ毎に正規表現は違いますので、サンプルコードがあったら、それが何用か、自分が使いたいツールではどんな表現に該当するのか(あるいは、該当するものが無いのか)を調べる必要があります。 Dreamweaverは使ってないので正確にはわかりません。 検索側の()は対応する$1,$2で参照できるようですが \U,\u,\L,\lによる大文字小文字変換が無い、あるいは、別の方法を使う必要があるのでは無いでしょうか? ここまで悩んでいるなら、変換に対応している別のアプリで変換するのが早いと思います。
補足
kmeeさん ご回答、ありがとうございました。 変換に対応している別のアプリでためしているではないですか。 私は、Peggyでも試しましたしEmEditor( http://jp.emeditor.com/ )Pro版でも試しました。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>検索窓 >\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 )ではこの置換は使えません。
補足
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)
正規表現は様々な書式があります。私が示したのは、ごく一般的な方法です。 意味を理解していないと。 \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の正規表現のマニュアルをご覧ください。
補足
ORUKA1951さん ご回答、ありがとうございました。 検索窓 \b([A-Z])([A-Z]*) 置換窓 $1\L$2\E で試しました。 結果は、「AFGHANISTAN」が「A\LFGHANISTAN\E」となりました。 Peggyというエディターでも試しましたが、うまくいきません。
- creative_soso
- ベストアンサー率83% (5/6)
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
補足
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)
DWの正規表現は使った経験がありませんが・・ ([a-zA-Z])([a-zA-Z]*) → \U\1\L\2 ([a-zA-Z]) ([a-zA-Z]*) アルファベット1文字 それに続くひとつ以上のアルファベット
補足
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」へ置換したい。 どなたか解決方法をご存知の方いますか?
お礼
ORUKA1951さん ご回答、ありがとうございました。 EmEditor( http://jp.emeditor.com/ )Pro版で、できました。 ([A-Z])([A-Z]*) を入力し、置換窓に \U\1\L\2
補足
ORUKA1951さん ご回答、ありがとうございました。 DWではやはりだめでしたが、EmEditor( http://jp.emeditor.com/ )Pro版では上記で動作しました。 テストファイルで試したので、明日、正規のファイルを置換してみます。 とりあえず、何とかなりそうですが。