- ベストアンサー
正規表現の質問
お世話になります。 PHPでの正規表現に関する質問です。 使っている教本の中に、次のようなコードがあります。 $files = new FilesystemIterator('.'); $files = new RegexIterator($files, '/\.(?:txt|csv)$/i'); foreach ($files as $file) { echo $file->getRealPath() . '<br>'; } これは、スクリプトと同じフォルダーにあるファイルの中で、.txt と .csv の拡張子のついたものだけを選択して表示するために、正規表現を使っているのですが、この中の ?: という部分の意味が分かりません。いろいろと正規表現に関する記事をネットで調べてみましたが、: コロンをメタ文字として扱っているものは見たことがありません。この ?: の役割を教えてください。お願いします。 ちなみに、これを取り去ってもちゃんと期待通りの結果が出ます。
- papashiroSooke
- お礼率90% (479/532)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
サブパターンを使った際に、マッチング結果が細かく分かれるのを防ぐために使います。 マッチングするかどうかには影響は無く、あくまでもマッチング結果の配列に収められる結果の分かれ方を指定しているモノです。 https://www.php.net/manual/ja/regexp.reference.subpatterns.php
関連するQ&A
- sedの正規表現について
下記のsedコマンド正規表現の意味がわかりません どのような動きをしているのか教えて下さいm(__)m $ file_name="linux.txt" $ echo $file_name | sed -e "s/.*\.\([^.]*\)\$/\1/g" txt
- 締切済み
- Linux系OS
- 正規表現入門などを見て、CSVを抽出する正規表現を調べています。
正規表現入門などを見て、CSVを抽出する正規表現を調べています。 ("(?:[^"]|"")*"|[^,]*), (?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*) などで、コロンの意味がわかりません。 どなたかわかる方、いらっしゃれば、お願いします。
- 締切済み
- Visual Basic
- 正規表現について教えて下さい
正規表現について教えて下さい $string = "LibrayMyUtil2File AppFile"; $pattern = '/([A-Z][a-z0-9]*)*([A-Z][a-z0-9]*)File/'; $replacement = '$2'; echo preg_replace($pattern, $replacement, $string);//Util2 App と表示される この例のように、「File」の前の単語に置き換えたいのですが、 このやり方だとpatternの「[A-Z][a-z0-9]*」が重複しているのが凡長だと思ってまして もっと短縮された書き方があれば教えてもらいたいです。
- ベストアンサー
- PHP
- 正規表現で詰まっています。
こんにちは。 今、正規表現で困っています。 ファイルの中身 <meta name="description" content=""> <title> B'zのサイトへようこそ </title> 上記のようなhtmlのソースなのですが、以下のように変換できるように正規表現を考えましたが、できませんでした。 変換したい表現 <meta name="description" content="B'zのサイトへようこそ"> <title> B'zのサイトへようこそ </title> titleタグで囲まれた文字を、metaタグのcontentの中に入れたいのです。 とても困っています。どなたかご教授下さい。よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- 正規表現 .+? について
正規表現(egrepコマンド)の .+? とはどのようなパターンを意味するのでしょうか。 例1のケース(.+? の部分)が何故マッチするのかがわかりません。 また、例1, 2のケースは共にマッチしますが、 .+? と .*? の違いは何になるのでしょうか。 例1. echo "tmp/foo.txt" | egrep "tmp.+?/.+?foo[^/]*$" 例2. echo "tmp/foo.txt" | egrep "tmp.*?/.*?foo[^/]*$"
- ベストアンサー
- その他(プログラミング・開発)
- 正規表現を教えて下さい。
正規表現を教えて下さい。 1行目の各拡張子を(赤)、2行目の行頭のsakuraを(青)、それ以外を(黄)に色分けする正規表現を教えて頂けないでしょうか。 [.txt;.ini;.cfg; sakura|"D:\Program Files\sakura\sakura.exe" "%P" ] サクラエディタ ver.1.6.50
- ベストアンサー
- その他(ソフトウェア)
- 正規表現の使い方
正規表現の使い方で困っています。 lsでディレクトリの中身を確認して、その名前とひっとするものがあれば、IFの中に入りたいのですが、エラーが出てしまいます。 正しい書き方をご存じのかたご回答のほど宜しくお願いします。 set `cat /DS/tmp/liste.fal |grep -v \#` for i do verz=$(dirname $i) set `ls $verz` for j do if (test $j = "Kommentar.txt") then echo "$j ist jetzt Kommentar.txt" echo "cp $j $zielverz" elif [[ "$j" =~ "*fal" ]] then echo "$j ist jetzt *.fal" echo "cp $j $zielverz" と続いていくのですが、[[ "$j" =~ "*fal" ]] この部分が間違っているようです。 シンタックエラーがでます。 私が検索したいファイル名はのようなかたちです。 riipe.fal フォルダの中には、他にも rippe.fal.neu rippe.erg.fal.neu Kommentar.txt という名前のものがあります。 宜しくお願いします。
- 締切済み
- Linux系OS
- 正規表現での置き換え
正規表現置き換えについて -----入力 ----- a (b) B (C) test.csv file.dat -----出力 ----- b (a) C (B) file.csv test.dat --------------- としたくて以下のコードを書いたのですが 実際の出力が $2 ($1) $2 ($1) $2.csv $1.dat となってしまいます。 --以下ソース %Convert = ( '(.+) \\((.+)\\)', '$2 ($1)' ,'(.+)\\.csv (.+)\\.dat', '$2.csv $1.dat' ); while(<DATA>){ foreach $key ( keys %Convert ){ s/$key/$Convert{$key}/gi; } print; } __DATA__ a (b) B (C) test.csv file.dat
- ベストアンサー
- Perl
- 正規表現教えてください。
正規表現を教えてください。 YYYYMMDD_aa._aa_bbb.txt とあったとき YYYYMMDDは日付をあらわし, aa._aaはサーバ名をあらわして bbb.txtはファイル名をあらわすとき YYYYMMDD aa._aa bbb 値は変化するものでYYYYMMDD_サーバ名_fail.txtは変わらないとした時 それぞれをあらわすperlでの正規表現を教えてください。 まとめてあらわすのではなく、ひとつずつを表す方法でお願いします。
- 締切済み
- Perl
お礼
早速にご回答をいただき、有難うございます。紹介いただいたサイトに行ってみました。あまり正規表現に慣れてないので、結構難しそうなことが書かれているように感じました。でも頑張って読んで理解したいと思います。