![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
Perl正規表現プログラムで、
s置換演算子の末尾に、
カンマと丸カッコでスカラ変数を囲んで、
存在している箇所
たとえば、
s/あいうえお/($hensu = $&)
=~ tr{ABC}{abc}, ($hensu)
=~ s{123}{123}, ($hensu)
/eg;
のような正規表現であれば、
上記のtr置換演算子や、s置換演算子それぞれの末尾に、
「 , ($hensu) 」
として、カンマと丸カッコでスカラ変数を囲んで、
存在している箇所は、
どのような意味があるのでしょうか?
以上になります。
PS:
ネット上や正規表現の本などを読んでも、
上記したような、
カンマと丸カッコでスカラ変数を囲んでいる
パターンの解説を、
見つけられなかった為、
ご質問させていただきました。
ご存じの方がいらっしゃいましたら、
教えてください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
いや・・・あの No.1さんがもう全部説明してくれてるんだけど・・・
gは本質じゃないから
s/<regex>/<replace>/e
を考える.
eをつけることで,<replace>を実行させる
#じつは ee というオプションもある・・・
ということで,
s/あいうえお/($hensu = $&)
=~ tr{ABC}{abc}, ($hensu)
=~ s{123}{123}, ($hensu)
/eg;
・・・みにくいから
s/あいうえお/
($hensu = $&)=~ tr{ABC}{abc},
($hensu)=~ s{123}{123},
($hensu)
/eg;
ってのは,$_ の中の「あいうえお」にマッチした部分が $& にはいって
それを $hensu に代入して tr して
その結果の $hensu を s{} して,
それを $hensu として評価させて
結果,$_ の「あいうえお」を$hensuの中身で置換する
ってところかなー
こんな書き方自分じゃしないからなー。。。
こんな書き方するよりも
順番に if なり何なりできちんと書いたほうが可読性があがるからいいと思う.
ついでに・・・$& ってのは正規表現の効率をめっちゃ悪くするから注意
The use of this variable ($&のこと) anywhere in a program imposes a considerable performance penalty on all regular expression matches. To avoid this penalty, you can extract the same substring by using @-. Starting with Perl 5.10, you can use the /p match flag and the ${^MATCH} variable to do the same thing for particular match operations.
ご回答ありがとうございました。
おっしゃる通り、このような書き方は、私も自分ではしないので、
今回丁寧に解説していただき、あと他の方々のご回答とあわせて、
ようやくこのサンプルの意味を理解することが出来ました。
それと、$&が正規表現の効率を悪くする点も教えていただき、
了解致しました。
きめ細かい解説をいただきまして、
本当にありがとうございました。
No.3
- 回答日時:
括弧の意味は、No1の回答にあるように、「意味なし」ですね。
( 2 * 3 ) + 4 の括弧の意味と同じく、「あっても無くても機能は同じ」。
s/あいうえお/($hensu = $&) =~ tr{ABC}{abc},
($hensu) =~ s{123}{123},
($hensu)/eg;
の、
($hensu = $&) =~ tr{ABC}{abc},
($hensu) =~ s{123}{123},
($hensu)
の部分は、正規表現では無いです。普通の式。カンマは普通にカンマ演算子です。
No1の方の指摘にある通り、s/正規表現/式/e の意味を調べてください。
ご回答ありがとうございました。
s/正規表現/式/e の意味自体は、
ネット上や本で調べていて、
式で置換出来ることは存じておりましたが、
Perlの「カンマ演算子」というものの存在自体を、
知らなかったため、
解析出来ていませんでした。
(Perlを初めて利用中であり、
今回は「正規表現」だとばかり思い込んでいて、
「正規表現」に関する本やネット情報ばかりを調べていた為・・・)
教えていただけましたおかげて、
ようやく納得出来ました。
本当にありがとうございました。
No.1
- 回答日時:
ん~, なんでそんなところで区切っちゃうんだろ.... せめて
s/あいうえお/($hensu = $&) =~ tr{ABC}{abc},
($hensu) =~ s{123}{123},
($hensu)/eg;
くらいにしようよ. とはいえこの「($hensu)」のかっこに意味があるようには見えない.
あ, s/// のオプション e を知らないと, 何をやってるかさっぱりわからんね.
s/あれ/これ/e
で「あれ」にマッチした部分を「『これ』を評価した結果」で置き換えます.
この回答への補足
早々にご回答ありがとうございます。
おっしゃる通りなんですよね。
実は、この正規表現の例は、
私が、既存のサンプルPerlプログラム(正規表現)を解析中に、
上記質問箇所だけが、
意味が不明だったので、
今回、ご質問させていただいています。
どなたか、
s置換演算子の末尾に対して、
,(カンマ) ($hensu)
を追加している意味(技術的な・・・)として、
なにか想定できそうなことを、
お気づきの方がいらっしゃいましたら、
ぜひヒントだけでもアドバイスいただければ幸いです。
以上、よろしくお願いします。
ご回答ありがとうございました。
最初、私が理解出来ておらず、
その後、いろいろな方々からの追加での回答を見て、
ようやくおっしゃっていただいていた意味を
理解出来ました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- Java 正規表現について質問です。 カンマありの整数と、カンマなしの整数をよしとする正規表現が知りたいです。 4 2022/05/20 07:59
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- その他(コンピューター・テクノロジー) 正規表現の置換で数値を合計したいです。 2 2022/10/17 11:01
- Excel(エクセル) 前の(左隣の)シートを連続参照するように、あとから変更したい 1 2023/02/22 00:51
- Windows 10 Windowsのバッチファイルで正規表現の置換方法について… 4 2022/12/09 16:00
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- PHP PHPを使って、別サイトの一部を取得して表示したいのです。。 1 2023/01/18 21:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
csvデータ ダブルクォーテ...
-
スペースで区切られた氏名から...
-
正規表現 特定の文字列を含む行...
-
C言語でテキストファイルの内容...
-
各項目がダブルクォーテーショ...
-
ハングルを日本語に置換
-
秀丸マクロで、あらかじめ選択...
-
EXCEL警告「置換対象のデータが...
-
VBscriptで「改行」と「"」を置...
-
対称群はなぜそう呼ばれるので...
-
正規表現で、特定の文字列を含...
-
テキストボックスの文字列を置...
-
パワーポイントの一括置換:複...
-
WordPress Contact Form 7 で特...
-
s/\\s*$// の意味
-
エクセル VBA 複数条件一...
-
EXCEL VBA でCTRL+Fのダイア...
-
C#で空白行を削除する方法
-
Excel VBA 置換の件
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スペースで区切られた氏名から...
-
VBA 置換文字がみつからない時
-
各項目がダブルクォーテーショ...
-
csvデータ ダブルクォーテ...
-
エクセル VBA 複数条件一...
-
正規表現で、特定の文字列を含...
-
csvデータのダブルクォーテーシ...
-
xmlファイル内の文字列置換
-
PowerShellでテキストの空白行...
-
ハングルを日本語に置換
-
C#で空白行を削除する方法
-
複数のパワーポイントファイル...
-
Excel・ユーザーフォームの情報...
-
C言語でテキストファイルの内容...
-
Eclipse 改行後のタブ
-
テキストファイル中の文字列の置換
-
正規表現 特定の文字列を含む行...
-
EXCEL警告「置換対象のデータが...
-
○文字目に文字挿入
-
VBscriptで「改行」と「"」を置...
おすすめ情報