正規表現について質問です。
テキストファイル内の文字列に対して、URL以外の「&」を「&」に置換したいのですが、
普通に置換してしまうと、URL内の「&」も全角になってしまうため、
正規表現で回避しようと考えています。
この場合、正規表現はどのように記述すればよいか、教えていただけると大変助かります。
----------------------------------------------------------------------
(成功例)
ガチャピン&ムック
http://hogehoge.jp/index.html?k=2011&id=0414
↓↓↓↓↓↓
ガチャピン&ムック
http://hogehoge.jp/index.html?k=2011&id=0414
----------------------------------------------------------------------
また、正規表現を使わなくてもできるなど、別の提案もOKです。
質問に不備があれば、その旨ご指摘お願いいたします。
正規表現勉強中のため、何卒よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
<回答>
自分も、これを正規表現とエディタの通常置換だけで綺麗に解決する方法は思い浮かびませんでした。
エディタのマクロを使うか、スクリプト言語が使えればそれほど難しい話では無いと思います。
例えばですが、先読み否定を利用してこんな正規表現を作ってみます。
※想定処理系は鬼車で、実験環境は「サクラエディタ+bregonig.dll(v 2.00)」です。
^(?![ ⇒]?\w+?p://)(.*)&
こうするとキャプション1に&までの文字列が入るため、置換後ワードに
$1置換希望文字列
とでも書けば、一見動いたように見えます。
しかしこれだと、1行内に&が複数現れるケースで、最後の1つしか置換出来ない事になります。
.*を.*?としても、最初の1つになるだけでしょう
自分の知識量だとこの辺を解決できる記法が無いとまでは断言できませんので、出来る!というのがあれば是非知りたいなと思います。
※参考変換例は、行頭に#を付与しています。
## 元データ
#ガチャピン&ムック
#ガチャ&ピン&ムック
#http://hogehoge.jp/index.html?k=2011&id=0414
# http://hogehoge.jp/index.html?k=2011&id=0414
# http://hogehoge.jp/index.html?k=2011&id=0414
#⇒http://hogehoge.jp/index.html?k=2011&id=0414
## 置換後
#ガチャピン&ムック
#ガチャ&ピン&ムック
#http://hogehoge.jp/index.html?k=2011&id=0414
# http://hogehoge.jp/index.html?k=2011&id=0414
# http://hogehoge.jp/index.html?k=2011&id=0414
#⇒http://hogehoge.jp/index.html?k=2011&id=0414
<おまけ>
ただ、スクリプト言語を利用してもよいのであれば、いろんなアプローチで簡単に解決できます。
一番真面目な方法はURLが含まれることを専用ライブラリで解析する方法でしょうが、そこまでやらずにこの正規表現のようにURIっぽいものを弾いてみます。
https://ideone.com/N1Ubf
手法選択の中で一案として貰えればと思います。
Perlが代表格ですが、正規表現はスクリプト言語内で真価を発揮しますので。
回答いただきありがとうございます。
正規表現はスクリプト言語内が得意分野なのですね。お恥ずかしながら特性を理解していませんでした。
置換ルールが固定されているので無理にエディタだけでやろうとせず、専門家に依頼することにします。
とても助かりました。ありがとうございました。
No.1
- 回答日時:
正直、あらゆるケースに対応したものを全自動でやろうとすると難しいと思います。
まず、その置換を行うソフトは何か?
テキストエディタの置換機能なのか、sedなのか、perlなのか、PHPなのか。
ソフトが違えば、正規表現自体に違いがあります。
半角→全角変換なら、「全角」が正しく使える(マルチバイト文字を「1文字」として扱える/マルチバイトの途中のバイトからはマッチしない)処理系が求められます。
次に入力がどんな形式になっているのか?その入力形式の特徴を使えば楽にできるかもしれません。
例えば、URLが 「必ず単独1行に改行無しでURLだけが書かれている」状態なら、そのような行を処理しない、という方法が使えます。が、他の内容と同じ行にあったり、途中で改行で切れることもあったり、だと面倒です。
例えば、URLは「半角英数記号」が基本であり、置換したい&の前後は必ず「全角」であるならば、後方参照を使って「前の全角&後の全角」→「前の全角&後の全角」のように置換できます。が、URLに全角を使っていたり、置換する&の前後が全角とは限らない、となると面倒です。
次に作業量がどれくらいなのか?
数ファイルだけなら、エディタの確認付き置換を使って、人間が判断するのが確実です。
この回答への補足
早速のご回答ありがとうございます。
以下、補足いたします。
⇒まず、その置換を行うソフトは何か?
└テキストエディタ、もしくは置換用のフリーソフト(Repl-Ace)を考えています。
⇒入力がどんな形式になっているのか?
└基本的には単独1行で書かれているのですが、たまにURLの前に全角スペースか半角スペース、もしくは「⇒」が入ります。
⇒作業量がどれくらいなのか?
└一度に作業するのは数ファイルなのですが、結構漏れがでたりしてしまうため、あらかじめ正規表現での置換を登録しておこうと考えています。
置換するところは他にもありますので、まとめてやりたいです。
度々すみませんが、何卒知恵を貸してくださいませ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Win11で画像ファイルが突然開け...
-
「再帰的」の意味がよく分からな...
-
中華ゲーム機のGame Console R3...
-
ある英語発音の本のあるサイト...
-
結構前にパソコン工房で購入し...
-
F5アタックとは
-
アガサハークネスを字幕で見た...
-
blenderで両眼立体計測法を用い...
-
インストールできない
-
英語の音声のサイトからのダウ...
-
iTunesは廃止されるらしいです...
-
Windows標準のフォトには写真は...
-
エクスプローラーで検索すると...
-
UTF-8ってBOMなしとBOM付きどち...
-
zipって何
-
昨日、仕事からの帰宅時に部屋...
-
レポート提出のため、印字され...
-
オービスとNシステムの違い
-
ゴミ箱から間違えて・・・
-
ドラマの火事やその他台風などA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Win11で画像ファイルが突然開け...
-
中華ゲーム機のGame Console R3...
-
パソコンがあできなくてもつけ...
-
ハイフン無しの電話番号でどう...
-
VBScriptについて。
-
フォルダの中にフォルダを作る...
-
使いたいフリーソフトがWindows...
-
全角英数字を日本で販売されて...
-
5万枚の写真(合計2TB)をZIPで一...
-
サイトの画像を頻繁に閲覧した...
-
全角英数字って全角の英字と全...
-
NTFSはバージョンがまたがる場...
-
SSDは読み取りによって劣化しま...
-
PCにあるdzentime ってなんです...
-
昨日、仕事からの帰宅時に部屋...
-
画像も動画も沢山あって合計4TB...
-
キャンセルしたダウンロードフ...
-
LINEのPC版でスピーカー、マイ...
-
英字や数字を常に半角にするに...
-
Windowsにはエクスプローラーが...
おすすめ情報