- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlでご助言いただきたく)
perlのマッチング演算子についての質問
このQ&Aのポイント
- perlのマッチング演算子についての質問です。マッチング演算子の正規表現パターンが文字数が多くて改行したい場合、コンパイルエラーが発生する問題について相談です。
- 質問文章で示されたperlのマッチング演算子の正規表現パターンは文字数が多くなっており、改行して可読性を上げたいと考えています。しかし、改行するとコンパイルエラーが発生してしまいます。何か解決策はありますか?
- perlのマッチング演算子の正規表現パターンについての質問です。文字数が多くなった場合に改行したいのですが、改行するとコンパイルエラーが発生します。どうすれば正しく改行できるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現で迷ったら、まずは perldocの perlre を読んでみましょう。 http://perldoc.jp/docs/perl/5.14.1/perlre.pod 通常、正規表現を改行で分割して表記することはできません。 改行文字が「改行文字に一致するパターン」としての意味を持ちます。パターン中に\nと書くようなものです。 .演算子は文字列を連結する演算を行うものです。正規表現内は、明示しない限り「演算」はしません。 連結の演算するなら、 パターンでよく使う「.(任意の1文字)」が文字列連結に使われてしまいます 対処法としては ・/x を使う。詳細はマニュアルで ・予め文字列変数に入れて、それをパターンに使う $pattern = '^\s+\S+\s+(\S+)\s+(\S+)\s+\S+\s+(\S+)'; $pattern .= '\s+(\S+)\s+\S+\s+\S+\s+\S+\s+\S+' ; $pattern .= '\s+\S+\s+(\S+)\s+\S+\s+\S+' ; if($test =~ /${pattern}/){ ~ ・このパターンに限っては、「1個以上の空白で区切られた文字列」なので、 @test1=split(/\s+/,$test) ; とsplitして if(scalar @test1== 14) { # splitされた項目数を数える→過不足あるなら期待しているデータではない $test1[2], $test1[3],$test1[5] ;# $1,$2..に相当する位置 等必要な箇所を使う、という方法もあります。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
//x