#!/usr/bin/perl -w use strict; open (FH, "< test.dat"); my @list = <FH>; my $line; foreach $line (@list) { # サンプル:9241201701.dat<>ステマと言われて困っています。- 2ちゃんねる知恵袋 (10) if ($line =~ /([\d]+).dat<>(.+) \(([\d]+)\)/) { print $1 . "\n"; # 9241201701 print $2 . "\n"; # ステマと言われて困っています。- 2ちゃんねる知恵袋 print $3 . "\n"; # 10 } }
こいつをwxWidgetsのwxRegEx(POSIX批准のC++風正規表現)で取ろうとするとうまく行かない、もう少し改良が必要か。
追記:2012/02/07
答えは意外と簡単で、括弧自体のエスケープをしっかりやれば良かった
参考サイト:正規表現で括弧自身を表す方法を教えて下さい
/* * Search.cpp * * Created on: 2012/01/17 * Author: learning */ #include "Search.h" int Search::OnRun() { // テキストファイルの読み込み wxTextFile datfile(wxT("./shar.dat")); datfile.Open(); // スレッド一覧読み込み用正規表現を準備する wxRegEx reThreadLine(wxT("([[:digit:]]+).dat<>(.+)\\(([[:digit:]]{1,3})\\)"), wxRE_ADVANCED + wxRE_ICASE); // 9241201701.dat<>ステマと言われて困っています。- 2ちゃんねる知恵袋 (10) // テキストファイルの終端まで読み込む for ( wxString line = datfile.GetFirstLine(); !datfile.Eof(); line = datfile.GetNextLine() ) { // 正規表現で情報を取得する reThreadLine.Matches(line); wxString oid = reThreadLine.GetMatch(line, 1); // 9241201701 wxString title = reThreadLine.GetMatch(line, 2); // ステマと言われて困っています。- 2ちゃんねる知恵袋 wxString response = reThreadLine.GetMatch(line, 3); // 10 cout << oid << endl; cout << title << endl; cout << response << endl; } return 0; }
あとvimで行番号を消すコマンドいつも忘れるからメモ「:set nonu」