No.4ベストアンサー
- 回答日時:
$1が文字化けする件に関して。
それは、日本語の半分(半角英数分のデータ)しか取り出していないからです。正規表現は日本語用に作られていないので、全角文字も半角英数として文字を処理するはずです。
$t="あいう";
@a=split(//,$t);#あいうを一文字ごとに区切り、配列にする
foreach(@a){print $_,"\n";}
を実行すれば分かります。全て文字化けし、ループは6回繰り返されます。(全角3文字=半角6文字)
一応あれは【】の中身を取り出すことのみを考えたものだったので、以下のようにすれば何とかなります。
$text='あは【件名】本文';
$text=~s/(.*)(\【.+?\】)(.*)/$2/;
print $text,"\n";
あは、を取り出したいなら2行目の$2を$1に。本文、を取り出したいなら$3に書き換えてください。正常に出来ると思われます。
ちなみに言い忘れましたが、$数字と言う変数は、本来正規表現内でのみ有効な変数です。普段は使わないように。(print $1;はエラーにはなりませんが、しない方がいいでしょう。)
お忙しい中の回答本当にありがとうございます。
$1~$3まで正常に取り出すことができました。
本当にありがとうございました!
いろいろと勉強になりました!
No.5
- 回答日時:
> $数字と言う変数は、本来正規表現内でのみ有効な変数です。
普段は使わないように。(print $1;はエラーにはなりませんが、しない方がいいでしょう。)そりゃちと言いすぎかと。
The numbered match variables ($1, $2, $3, etc.) and the related
punctuation set ($+, $&, $`, $', and $^N) are all dynamically scoped
until the end of the enclosing block or until the next successful match,
whichever comes first. (See "Compound Statements" in perlsyn.)
NOTE: failed matches in Perl do not reset the match variables, which
makes it easier to write code that tests for a series of more specific
cases and remembers the best match.
ということで有効範囲の中にあるのなら、
「読むために」参照することは
問題ないかと。
#readonlyの変数なので代入は不可
if (/Time: (..):(..):(..)/) { # parse out values
$hours = $1;
$minutes = $2;
$seconds = $3;
}
こういう例もドキュメントにありますし。
No.3
- 回答日時:
ソースが非常に汚い上に、正規表現の中でも文字列の置き換えと言うものを使った方法ですが、こんな感じでできました。
$text='あは【件名】本文';
$text=~s/(.+?)*(\【.+?\】)(.+?)*/$2/;
print $text,"\n";
基本的な考え方は、【】の前と後ろを別の変数に入れて、切り分けると言う感じです。
(あは【件名】本文 → $1=あは,$2=【件名】,$3=本文)
もう少しがんばれば、もうちょっとはスマートになると思います。例えばグループ化の()の前と後ろを、$数字内に代入しない、(?:)に書き換えるとか。
この回答への補足
ご回答ありがとうございます。
【】内の件名を無事取り出すことができました。
しかし、【】の前と後($1、$3)を取り出そうとした際に文字化けしてしまいうまくできません。
何か対策はあるのでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Java JAVAの1つの正規表現で上記Textすべてと合致する正規表現を教えてください。 4 2022/11/06 08:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
perlで2次元配列をサブルーチ...
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Strawberry Perl for Windows ...
-
Perl 重複カウント 上位3名
-
perlでリテラル値はメモリにど...
-
perlのrequireの動き方について...
-
Windows10においての『Perl』の...
-
TeraPadエディターの操作方法に...
-
Wコロン
-
perl qw 中でコメントアウトす...
-
Perl テキスト 列検索
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報