perlとMySQLでデータベースを作っています。
だいぶ行き詰ってしまったので質問させてください。
以下のような一行の文字列が存在するとします。
ABC DEF @@@2222 EHI J @@@888 KL MN OPQR @@@632 ST
この中から、
2222
888
632
を取り出して配列に格納することは可能でしょうか?
分割することは可能な気はするのですが、
それを配列に入れるとなるとどうにもならなくなってしまいました。
漠然とした質問で大変申し訳ないのですが、
なにかヒントになるものだけでもお気づきの方いらっしゃいましたら、
ぜひご教示くださいませ。
No.3ベストアンサー
- 回答日時:
やり方はいろいろありますが、「英数字と空白以外の文字列」に続く「英数字文字列」を配列に入れるなら、
$str='ABC DEF @@@2222 EHI J @@@888 KL MN OPQR @@@632 ST';
(@array)=($str=~/(?<=[^\s\w])(\w+)/g);
ご回答ありがとうございます。
なるほど!
>(?<=[^\s\w])(\w+)/g);
この部分を解読していて、
こんな方法もあるのかと感心してしまいました。
今はとりあえずspliceを使ってうまくいっているのですが、
バグが出るようならこちらの方法で試してみたいと思います。
ありがとうございました。
No.2
- 回答日時:
この文章だけからは「何を取り出すのか」が分かりません.
どんな文字列が来てもいいように, 言葉で「取り出すべきもの」を規定してください. それができなければ, プログラムにすることは不可能です.
案外
s/@@@(\d+)/g
くらいだったりして.
ご回答ありがとうございます。
言葉足らず過ぎてすみませんでした。
今回のケースでは、
逆に後で分割するために@@@という文字列を途中で足していました。
ですので取り出すべきものは、
@@@直後にある不特定数桁の数字というものでした。
このままだと分割するのに困ったので、
街頭数字の頭と末尾両方に@@@を入れることでなんとか解決することができました。
ありがとうございました。
No.1
- 回答日時:
まず、文字列をスペースでsplitします。
その配列の要素ひとつひとつに対し、
@@@を含むか否か、をジャッジします。
含むものだけを抜き出し、別の配列に格納します。
その配列の全ての要素に対し、
@@@を削除する処理を施します。
ご回答ありがとうございます。
論理的な処理順序はなんとか理解できていたのですが、
>含むものだけを抜き出し、別の配列に格納します。
この部分の方法が思いつきませんでした。
結局spliceという関数でなんとかすることができました。
ヒントをいただき、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
csv形式のデータの一部を削除し...
-
文字の整列(printf)
-
DataGridViewに配列の値を表示...
-
Generic.List・ArrayList・配列...
-
マクロ Publicでの配列定義
-
隣同士の数字を足し合わせる
-
perlで2次元配列をサブルーチ...
-
delphi の 標準偏差のプログラ...
-
jcode->jfold で禁則処理
-
Strawberry Perl for Windows ...
-
VBのReturnの使い方
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
アクティブセルから、A列最終行...
-
VBAでの一時停止と再開の方法
-
DoEventsが必要な理由について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
二次元配列における要素数のは...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
組み合わせについての質問です...
-
隣同士の数字を足し合わせる
-
複数の配列の全ての組み合わせ...
-
perl 初等プログラミングについて
-
jcode->jfold で禁則処理
-
一致する要素が格納されている...
-
チェックボックスのperlでの値...
おすすめ情報