dポイントプレゼントキャンペーン実施中!

特定の文字列に""を追加する正規表現を教えてください。

置換前 ID=○○○○
置換後 ID="○○○○"

とするにはどうすればよいのでしょうか?
正規表現というものを最近知ったのですが、どうしたものか全然わかりません…。
よろしくお願いいたします。

A 回答 (4件)

こんにちは。



以下は、【タグ付き正規表現】での置換が可能なテキストエディタ等で置換を行う
場合の一例です。

注1)以下の例は、「秀丸エディタ」で置換する場合のものです。
注2)使用するアプリケーションにより、メタ文字(エスケープシーケンス)、及び、
  部分正規表現(タグ付き正規表現)の文字列などが異なる場合があります。
  その際は、環境に合わせて適せん変更して下さい。
注3)あくまで一例ですので、下記以外での記述方法も考えられます。

■例1
"ID="に続く、【限定した文字列】を " で括る場合。

例えば、
  置換前: ID=ABC0001
  置換後: ID="ABC0001"
としたい場合、
  検索文字列: (ID=)(ABC0001)([ \t]|$)
  置換文字列:  \1"\2"\3
  注)上記の検索文字列の、3番目の()カッコ内の『[』の後には、
    半角スペースが1個入っています。
として置換します。

■例2
"ID="に続く、【任意の文字列】を " で括る場合。

例えば、
  置換前: ID=○○○○
  置換後: ID="○○○○"
  ○○○○は任意の文字列
  ※任意の文字列は、
     半角スペース、タブ、"(半角ダブルクォーテーション)
     及び、改行文字を含まない連続した文字列
   とします。
としたい場合、
  検索文字列: (ID=)([^ "\t\r\n]+)([ \t]|$)
  置換文字列: \1"\2"\3
  注)上記の検索文字列の、2番目の()カッコ内の『[^』の後と、
    3番目の()カッコ内の 『[』の後には、半角スペースが1個
    入っています。
として置換します。

※正規表現の詳細については、下記サイト等をご覧下さい。

■参考サイト
◎秀丸エディタ公式サイト
正規表現(Ver8.00対応版)
http://homepage3.nifty.com/kons/hidemaru/helpsit …
\1・\2 一般的正規表現互換のタグ付き正規表現(Ver8.00対応版)
http://homepage3.nifty.com/kons/hidemaru/helpsit …
◎Regular Expression
http://www.sixnine.net/regexp/
◎正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html

以上です。
    • good
    • 0

PHPの例



<?
$str="ID=aaa xxx ID=bbb yyy ID=ccc";
print $str."<br>\n";
$pattern="/(?<=ID=)(.*?)(?=[\s\t]|$)/";
$replacement="\"$1\"";
$str=preg_replace($pattern,$replacement,$str);
print $str."<br>\n";
?>
    • good
    • 0

正規表現には「方言」があるので、どの言語やツールで使用するかが明記されないと答えようがありません。


置換方法もいろいろあるので、これも指定がないと答えようがありません。

また、置換前ですが、
・これだけで1行なのか、ある行の一部なのか。一部なら、IDは複数あるのか、それを全部置き換えるのか
・IDの部分にはどんな文字列が入るのか
英数字だけ、とか、日本語も入る、とか、空白も入る、とか
必ず「ID」なのか、可変なのか
・○○○○のどんな文字列が入るのか
(以下同じ)
・書式はどうなっているのか
=の前後のに空白が入ることもあるのか
区切りを示すような文字(C言語でのセミコロン、とか)が入るのか
コメント文が付く場合があるのかどうか

といったことで、どのような正規表現にすればよいかが変わってきます。対応を間違えれば、置換したいものを置換しなかったり、置換してはいけないもの置換したり、といったことが起ります。

・これだけの行
・ID= だけ
・○○○○は任意
・前後等に空白、コメントといったよけいな文字は無い
・テキストエディタの置換ダイアログで、検索と置換の2つの欄に入力する
と仮定して、次のような形になるでしょう
検索: ^(ID=)(.*)
置換: \1"\2"

^:先頭/行頭を表わすメタ文字
():正規表現をグロープ化する。いろんな用途があるが、今回は後で引用するために使う。
.:任意の文字にマッチするメタ文字
*:直前の表現の0個以上の繰り返し。今回は .(任意の文字)の繰り返し
\1,\2: 検索での()の内容。順番に番号が振られる。(ID=)にマッチしたものが\1、(.*)にマッチしたものが\2になる。

方言がある、というのは、例えば
・(): sedでの標準は\(\)と\を付けなければならない。\無しだと、「括弧のマッチする」という普通の表現。
・\1,\2: Perl等では $1,$2 となる
というようなことです。また、ある体系での表現が別の体系に対応していない、というときもあります。

置換方法の違いは、例えば
・テキストエディタで、置換ダイアログの検索と置換に入れる。正規表現を使うを有効にする
・Perl、Sed等、専用のコマンドがある:perlなら s/^(ID=)(.*)/$1"$2"/ ;
・専用関数を使う
というのがあります。
    • good
    • 0

正規表現というのが よくわかっていないと思われます



特定の文字列に合う合わないを記述するのが正規表現

今の状態で分かるのは 置換する必要があるというだけ

置換については正規表現は関係するけど
こちらは言語によって異なるので回答しようにもできない

正規表現自体も実装によって違います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!