No.6ベストアンサー
- 回答日時:
補足中の、
$_ =~ s/([smtwf].*day)/ucfirst($1)/eg;
ですが、'.'は改行以外のすべての文字とマッチしてしまうので、英数文字をあらわす'\w'で置き換え、
$_ =~ s/([smtwf]\w*day)/ucfirst($1)/eg;
とするのが正しいです。
(でもこれだとdayも引っかかるので、[smtwf]\w+day がいいでしょうね)
共通項であるdayをまとめるのなら、
$_ =~ s/\b((sun|mon|tues|wednes|thurs|fri|satur)day)\b/ucfirst($1)/eg;
という書き方でどうでしょうか。(\bは入れておいたほうがいいと思います)
また、置換項目を変数で管理したかったら、
@week = ('sun','mon','tues','wednes','thurs','fri','satur');
$line = "today is friday. tomorrow is saturday. the day next tomorrow is sunday.";
foreach $_(@week){
$line =~ s/\b(($_)day)\b/ucfirst($1)/eg;
}
とか。見栄えはよくなります。
(ここまでやるとdayをまとめるとかは考えなくてもいいですね)
ご回答ありがとうございます。
配列変数で管理するとスッキリしますね。
曜日だけでなく、いろいろなところで応用が効きそうです。
いろいろ勉強になってよかったです。
将来的にはプログラマーになりたいと思っていますので、
また質問するときはよろしくお願いします。
ありがとうございました。
No.5
- 回答日時:
ちょっと複雑ですが、
$line =~ s/\b(\w*day)\b/ucfirst($1)/eg;
\bは単語の区切り(スペースや改行、タブ、ピリオド、コンマなど)、\wは英文字をあらわします。
単語と単語の区切りに囲まれ、"day"で終わる英単語の頭を大文字に変えます。
todayやyesterdayは個別に戻してやってください(^^;
この回答への補足
早いご回答ありがとうございます。
試しにサンプルを作ってみたところ、次のような結果になりました。
----------------------------------------------------------------
#!/usr/bin/perl
$_ = "today is friday. tomorrow is saturday. the day next tomorrow is sunday.";
$_ =~ s/\b(\w*day)\b/ucfirst($1)/eg;
print $_ . "\n";
----------------------------------------------------------------
<<結果>>
Today is Friday. tomorrow is Saturday. the Day next tomorrow is Sunday.
やはりちょっと発展させて、sunday, monday, tuesday, … ,saturdayだけ、
変換するようにしようと思って、
$_ =~ s/([smtwf].*day)/ucfirst($1)/eg;
としてみたところ、行頭のtodayしか変換されませんでした。
(これだと、うまくいってもtodayが変換されてしまいますが…)
Today is friday. tomorrow is saturday. the day next tomorrow is sunday.
しかたないので、
$_ =~ s/((sunday|monday|tuesday|thursday|friday|saturday|^today))/ucfirst($1)/eg;
としてみたところ、うまく行きました。
<<結果>>
Today is Friday. tomorrow is Saturday. the day next tomorrow is Sunday.
でもこれだとちょっと見栄えが悪いので、もう少し何とかしたいです。
dayが共通なのでdayをまとめて、先頭にいろいろ入れられるようにして、
そこを変えるだけでいろんなパターンが変換できるようにしたいです。
度々申し訳ありませんが、これだけ最後に教えていただけませんか?
No.4
- 回答日時:
行頭の文字だけを大文字にしたいのであれば、
# $lineは英文が1行分入っている
$line =~ s/^(.)/uc($1)/e;
先頭の一文字を大文字にする置換演算です。
この回答への補足
ご回答ありがとうございます。
どうやら質問のしかたが悪かったようです。
教えていただいた方法で変換できることは確認できました。
実際にやりたかったことは次のようなことです。
例えば、英文の中にmonday、tuesdayなどが入っているとします。
これらを一括でmonday→Monday、tuesday→Tuesdayにしたかったんです。
monday、tuesdayは英文の中にランダムに入っていますので、
○○dayがあったら先頭を大文字にしたいです。
このさいtodayも大文字にしてしまった良いです。
(あとで同様の操作でTodayはtodayに戻せるはずなので。)
よろしくお願いします。
No.3
- 回答日時:
こんにちは。
全て小文字で入力された複数の英文というのは、
一つの変数に複数の英文があるのか、ファイル1行毎に英文ができてるのか。
また一文と見るのはピリオドまでが一つの英文とするのか等。
その辺を明示すれば、良い回答が付くかもしれません。
ucfirstという関数を使えば先頭文字は大文字になります。
(どこが先頭かは判別できません。あくまで文字列の先頭が大文字になります)
例:
$test = "nice to meet you";
print $test;
print "<br>";
print ucfirst ( $test );
== 結果
nice to meet you
Nice to meet you
質問のしかたが悪いのに、良いご回答をいただけたことに感謝します。
ucfirstでWEB検索したところ出てきました。ちゃんと関数が用意されているんですね。
uc関数についても載っていたのでさらに勉強になりました。
ありがとうございました。
No.2
- 回答日時:
処理を順番に考えて行きます。
1.データを変数に入れる
2.データを単位で区切り、配列に格納(行頭なら改行コード、文節ならピリオド等々)
3.配列文処理を繰り返す
3-1.英文字1文字目をucで大文字変換
こんな感じでしょうか
No.1
- 回答日時:
私は、現在契約切れのフリーター(ほぼ無職)です。
30代の男性です。
『Perl』のプログラムについては何も知りませんが・・・。
行の先頭の文字を入力する時だけ、『Shift』キーを押しながら入力する・・・という方法ではダメでしょうか?
違っていたらゴメンナサイ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- 英語 アルファベット順の4文字以上の英単語 10 2022/07/30 22:42
- 教育・学習 英語の事で質問です。 今Androidスマホでローソンアプリに登録中なのですが、 パスワードの説明文 3 2023/06/24 07:59
- その他(IT・Webサービス) パスワードで○文字以内、とかの規定があるのはなぜ? 4 2022/06/28 13:13
- 英語 英作文についての質疑応答 1 2022/11/20 07:17
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- 英語 英語の悩みです。私は中学の頃殆ど英語の授業をサボって英語の文字が読めません。 さすがに大人になって英 6 2022/11/03 20:34
- Android(アンドロイド) Pixelのレコーダーで文字起こしした英文を検索する方法 4 2022/10/21 07:45
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 16:55
- 英語 英単語を探してます! 英単語の頭文字を取っても成立する、英単語の頭文字を変えても成立する英単語を教え 24 2022/05/25 01:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
EXCELからCSVにすると余計なカ...
-
エクセルで数値を全角文字(カ...
-
VB2005のTextBoxでカン...
-
何故、日本は未だに数字を3桁...
-
パス区切りの文字について
-
openoffice calcで#DIV/0! の...
-
StringGridの内容をクリップボ...
-
3桁ごと?4桁ごと?コンマの...
-
(エクセル)特定のスペースを...
-
PHP カンマをエスケープしたい...
-
カンマ区切りでないテキストをc...
-
何故、日本は未だに数字を3桁...
-
カンマ区切りの数字をCSVフ...
-
エクセルの区切り位置の設定方法
-
VBAでtxtファイルを読み込む際...
-
データグリッド内の数値をカン...
-
エクセル セルの書式設定 ユ...
-
C#でcsvファイルの列を入れ替え...
-
カンマ区切り
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
何故、日本は未だに数字を3桁...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
カンマ区切りの数字をCSVフ...
-
桁区切りについて
-
CSVの定義
-
WORDで改ページすると時々グレ...
-
[VBA][Excel]クリップボードか...
-
データにカンマが入ったCSVデー...
-
カンマ区切り
-
3桁ごと?4桁ごと?コンマの...
-
VB2005のTextBoxでカン...
-
openoffice calcで#DIV/0! の...
-
ひとつの命令を複数行に記述
-
JPY ¥1,500.00は日本円でお幾ら?
-
パス区切りの文字について
-
VBAでtxtファイルを読み込む際...
-
C#で、テキストボックスの入力...
おすすめ情報