C言語のソースコードを扱っています。
デバッグのため(関数がどういう順番で呼び出されているかを知るため)、関数の先頭にprint文をつけようと思っています。
例えば、
int hoge(引数の並び)
{
関数の中身
}
なら
int hoge(引数の並び)
{
printf("hoge");
関数の中身
}
といった具合です。
関数が膨大なので、手作業で一つずつprintfを書くのは現実的ではありません。
関数の最初の1行のパターンマッチは、/int\s\w*(.*)/
でうまくいくのですが、次の行の{まで含んだ正規表現に対応させるやり方がわかりません。
また、printf文を読み込んだソースコードに挿入するにはどうしたらよいのでしょうか。
どなたか分かる方がいらしたらご教授よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
2行単位で処理するようなループを書けば、正規表現マッチが簡単になると思います。
my $twoline = <FH>;
while (<FH>) {
$twoline .= $_;
$twoline .= "printf(\"hoge\");\n" if $twoline =~ /int\s\w*\(.*\)\s*\n\s*\{\s*\n/;
my ($line1, $line2) = $twoline =~ /^(.*\n)(.*\n)$/s;
print $line1;
$twoline = $line2;
}
print $twoline;
No.3
- 回答日時:
複数行マッチングはmオプションを付ければ可能です。
具体的には、
/int\s\w+(.*)/m
のようにすればOKです。
注意点としては、複数行マッチングの時、任意の一文字を表す「.」はそのままでは改行にはマッチしません。
sオプションを付ければマッチするようになります。
perlの正規表現は結構複雑な仕様なので、リファレンスを一読されることをお勧めします。
No.1
- 回答日時:
えぇと....
/int\s\w*(.*)/
という正規表現だと, int 型の変数の宣言にもマッチするはずなのですが....
あと, int 以外 (void を含む) を返す関数で破綻するね.
どこまでまじめに処理するかにもよるんだけど, 手を抜くなら
$/ = undef;
$file = <>;
で全体を一気に読み込んでからよろしくする.
解答ありがとうございます。
>あと, int 以外 (void を含む) を返す関数で破綻するね.
ここは、適宜置き換えるので問題ありません。
>どこまでまじめに処理するかにもよるんだけど, 手を抜くなら
$/ = undef;
$file = <>;
で全体を一気に読み込んでからよろしくする.
すいませんが、もう少し詳しく説明してくれませんか。「全体を読み込む」とか「よろしくする」ではわかりませんでした。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
php初心者ですメールについて教...
-
正規表現
-
pythonの正規表現、全角カタカ...
-
正規表現でパスワードのチェック
-
正規表現 \\b123bと^123$は同じ?
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
EXCELからCSVにすると余計なカ...
-
Accessで日付や数値を全角で表...
-
カンマ区切りの数字をCSVフ...
-
エクセルで数値を全角文字(カ...
-
「何とかで始まり、何とかで終...
-
VBA 置換文字がみつからない時
-
住宅にカナを入力する際に丁目...
-
コマンドプロンプト 全角を含ん...
-
UWSC教えて
-
エクセルでの”々”の扱い
-
VBA 文字に半角が含まれて...
-
SQLのデータで半角カナを全角に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
これは大きなお世話ですよね? ...
-
マッチングアプリで一言メッセ...
-
正規表現
-
なんで真面目な出会いを求める...
-
マッチ箱(マッチ棒の入った箱)...
-
金額にマッチする正規表現について
-
シェルスクリプト [[ $number =...
-
条件にマッチした行数のカウント
-
リナックスの grepコマンド ...
-
perlで記号除去を行いたいので...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
UNIXコマンドのパターンマッチ...
-
正規表現
-
Tinderのマッチングアプリ辞め...
-
pythonの正規表現、全角カタカ...
-
正規表現について VB6
-
正規表現 .+? について
-
日本語環境下でのバックスラッ...
-
Perl 正規表現に関して
-
配列内の要素をパターンマッチする
おすすめ情報