[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 12/14 15:13 / Filesize : 194 KB / Number-of Response : 810
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現 Part5



1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ]
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

前スレ
正規表現 Part4
pc11.2ch.net/test/read.cgi/tech/1186030400/

136 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 17:27:02 ]
教えてください。テレビ番組の検索で「体操」の番組をすべて検索したいのですが、
そのうち「テレビ体操」「みんなの体操。」を除外するにはどのように書けばいいでしょうか?

137 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:22:34 ]
>>136

>>1 を読んでください。


138 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:53:31 ]
>>137
すみません。これです 1st.geocities.jp/tvrock_web/

一般的な話でいいので教えていただけると有り難いのですが。

139 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 19:36:20 ]
含む含まないじゃなくて、完全に一致するのを除外?

^((?!^テレビ体操$|^みんなの体操。$).)*体操.*$

こうかなあ・・・

140 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 19:39:19 ]
環境によっては、最初の括弧のあとに ?# が必要かも

141 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 19:40:15 ]
おっと、?: ね

142 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:11:20 ]
(11:22)
このような括弧になっている文字はどうやって指定したらいいんでしょうか?
\([0-9]{1,2}:[0-9]{1,2}\)

こんな感じで試してみたんですがうまくいきませんでした・・・。

143 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 23:55:13 ]
>>142
「(」とマッチさせたいときに「(」と書くか「\(」と書くか「\\(」と書
くかは環境依存なんだ。というわけで >>1 を読んで。



144 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:05:30 ]
半角スペースを指定する方法ってありませんか?



145 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:45:57 ]
/ /

146 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:46:11 ]
>>144
>>1を100回音読しろ。

147 名前:デフォルトの名無しさん [2008/07/24(木) 09:50:39 ]
>>145
/ /
これってどういう指定法なんでしょうか?

148 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:52:30 ]
それでわからんのなら、なおさら自分の環境書けよ

149 名前:デフォルトの名無しさん [2008/07/24(木) 10:03:51 ]
ごめんなさい、一から勉強してきます

150 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 11:32:45 ]
一からじゃねぇよ、零から始めろ。

151 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:13:27 ]
(abc) → abc
([abc]) → abc
[abc(def)hij] → abc(def)hij
[abc(d[ef])hij] → abc(d[ef])hij としたいが、
(ab)(cd) → (ab)(cd) のまま。 ab)(cd  にはしたくない。
([abc)] → ([abc)] のまま。abc にはしたくない。
つまり、「文字列両端にあるかっこが、互いに対応する開き・閉じで限りは削除したい」というとき、
perl 5.8.8 の正規表現で書けますか ?

152 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:35:57 ]
(abc) → abc
([abc]) → a-c
[abc(def)hij] → a-f or h-j or ( or )
[abc(d[ef])hij] → a-f or h-j or ( or ) or [ or ]
(ab)(cd) → (ab)(cd)
([abc)] → 構文エラー

(\[abc)]なら動く

153 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:45:11 ]
ああ紛らわしくてすみません、(abc) などは、正規表現ではなく、処理対象の文字列です。
(abc) → abc は、(abc) が入ったとき、それを abc に置換したい、という意味です。

  【文字列】  → 文字列
  【文字列A】と【文字列B】 → (置換しないでそのまま)
  《簡単な【文字列】》  → 簡単な【文字列】
  【入れ子の《文字列の【中身】は》そのまま】→入れ子の《文字列の【中身】は》そのまま
  【またいでいる《かっこは】そのまま》 →(置換しないでそのまま)

という置換をしたいのです。

154 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:55:46 ]
一番上は\((abc)\)だな

やりたいことは分かったんだが俺には分からないから賢者に任せる

基本外側にある括弧は取り除く
例外として括弧が並んでる or 括弧が入れ子になってる場合は括弧を取り除かない
という感じか



155 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 15:10:52 ]
>>151
pattern code expression (??{ expr }) を使えば再帰的な正規表現を書くことが出来る。

156 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 20:51:34 ]
性器表現で痴漢

157 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 22:50:53 ]
既出

158 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 04:00:55 ]
毎日毎日、暑い。暑い。暑い。暑い。
物価高で肉が食えないからスタミナ無い。
エアコン代もバカにならない。
しかもCPUは温風を吐き出しまくる!
暑い。あ゛〜〜〜っ!もう我慢ならん!
正規表現でなんとかなりませんかねぇ

159 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 16:06:39 ]
htmlソースからcharsetの値(UTF-8とか)を取り出すスマートな正規表現は
どんなものがありますか?

160 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 16:10:35 ]
/\bcharset\s*=\s*("|'|)(.*?)\1/i

161 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 16:11:33 ]
>>160
仕事速いね!
ありがとうございます

162 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:13:15 ]
/w{4,}|(っ|ぇ)うぇ/
/うは(w|w){2,}|おk(w|w){2,}/

これに類する内容をマッチさせるのにもっとスマートな方法はないものか。。

163 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 15:06:33 ]
うは[ww]{2,}じゃダメですか

164 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 06:35:43 ]
無限ループになってしまうような正規表現て書けるんですかね?



165 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 09:18:49 ]
書けても、それを解釈するエンジン側で、よきにはからう。
っつーか /.*/ でも無限ループとは言える。
循環参照?

166 名前:デフォルトの名無しさん [2008/08/24(日) 05:38:57 ]
↓このスレで荒しが酷くてみんな困ってるのですけど
  カレー板限定で見えなくする上手い正規表現は無いでしょうか・・・

お前ら、美味しいレトルトカレーを教えれ! 7袋目
food8.2ch.net/test/read.cgi/curry/1203495304/

167 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 05:42:18 ]
/(!|[ww]|…)/iでNG

168 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 09:05:20 ]
なんでこうやって荒らし宛てにNGの抜け道を書くんだろうね。
food8.2ch.net/test/read.cgi/curry/1203495304/617

正規表現に特定板限定自動荒らし検知機能はないよ。

169 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 09:20:24 ]
文字列の前後の半角/全角スペースを除去したいのですが、
後ろの部分がうまく除去されません。

^([  ]*)(.*)([  ]*)$

どのようにすればうまく行きますか?




170 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 10:34:12 ]
真ん中の .* に後ろの全角スペースも含まれるからじゃない?
その記法が使える環境なら、[^ ]* とか?

171 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 10:34:58 ]
ってこりゃ真ん中の全角スペースで止まるか。

172 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 10:45:09 ]
*じゃなくて+

173 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 11:22:09 ]
/^(\s*)(\s*\S*)*(\s*)$/
これで引っ掛けられる?
\sは空白、\Sは非空白ね。
^と$は必要ないかも。

174 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 12:05:02 ]
Javascriptだけどこんな感じでやってるな

function trim(str){ return str.replace(/^[  \t]+|[  \t]+$/g, ""); }




175 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:48:35 ]
最近は再帰的にマッチできる正規表現が出てきてるんですね
メールのコメントをみんなどうしてるのかずっと悩んでました

176 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 07:59:25 ]
後方参照は便利だね。

177 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 10:09:57 ]
>>175
形式言語的な意味で「正規(正則)」な言語ではなくなってるけどね

178 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 13:12:16 ]
前ってどっちですか?
後ろってどっちですか?

179 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 15:32:26 ]
あー、あるあるw
プログラムカウンタが進む方(番地が大きい方)が前っぽいのに、
前方参照っつーと番地が若い方だったり。

180 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:19:58 ]
このマップが悪いのかな、マップの赤点が見づらいわ

181 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:20:49 ]
誤爆ね

182 名前:デフォルトの名無しさん [2008/08/31(日) 10:38:11 ]
Rubyです
予め文字列を逆にしておき連続する改行の後ろだけにマッチ

/\n(?=(?:\n[^\n]+)+)$/

もっとスマートな方法があれば教えてください

183 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:31:48 ]
連続する改行の後ろだけにマッチ
って事なら、リバースする前に
/[^\n]+\n(?=\n+)/
じゃダメなのかな

184 名前:182 mailto:sage [2008/08/31(日) 11:58:23 ]
アホだ〜
ここまで解ってるなら逆にする必要なかった

/^((?:[^\n]+\n)+)\n(.*)$/m

これで\1と\2を取り出せば良いんですよね



185 名前:182 mailto:sage [2008/08/31(日) 12:04:02 ]
>>183
リバース前にそれだと前の改行にマッチしてしまいませんか?

186 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 08:28:15 ]
最小一致の呪文を覚えた

/\A((?:.+?\n)+?)(?:\n(.*))?\z/m

最終的にこうなりました
正規表現奥が深いです

187 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:43:01 ]
>>84-85
この範囲[x,y]って表現は何のことですか?java/rubyでもないんですけど・・

188 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:08:18 ]
>>187
数学

189 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:09:23 ]
>>187
[文字の範囲] と
{繰り返し回数} を混同してないか?

190 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:15:43 ]
数学。あーそういうことですか。

 \\s(\\w)
 \\s([\\w])

の違いを調べてるんですが、同じくヒットするんですけど何か違いはあるんでしょうか。
\\w => \wです。

191 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:19:54 ]
ありません

192 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:35:50 ]
あーそーですか。ありがとうございます。

193 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 09:37:55 ]
数学上の範囲[a,b]は、プログラム的な表現は a..b  や (a..b) じゃないですかね?

194 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 12:48:04 ]
Javaなんですが、強欲な数量子ってのは、欲張り表現ってのでしょうか。
デフォルトでは最長一致なんですが(c+は、c+?ではない方です)、このデフォルト
の挙動 c+ が強欲表現 c++ なんでしょうか?
いまいち c+ と c++ の違いがわからないのですが、何か良いサンプルはないでしょうか。
ちなみに、ネタじゃないですよ




195 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:21:19 ]
>>194
「強欲な数量子」でググれ





"ab" に対して /.+b/ と /.++b/ とか

196 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:29:59 ]
>>194
/c+/と/c++/単独では対した違いはないが、
強欲=「バックトラックしない」だから、後ろに対して影響がある。
たとえば、/c+c/は"ccc"にマッチするが、/c++c/は"ccc"にマッチしない。

197 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:35:38 ]
なんだバックトラックか。
rubyでも廃止予定とか言わず、サポートすればいいのに…

198 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 14:17:08 ]
c++ってcが2の倍数分だけ得るって事か

199 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 18:21:05 ]
>>194
c+? : non-greedy (正規表現全体がマッチする範囲で最短)
c+ : greedy "貪欲" (正規表現全体がマッチする範囲で最長)
c++ : possessive "強欲" (正規表現全体がマッチしなくなっても、とにかく最長)

200 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:17:26 ]
丁寧にありがとうございます。

201 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:22:59 ]
rubyの(?> )とほぼ等価ですかね。
イマイチ使う場面に遭遇しないんですけど…
どういう整形に必要かわからないんですけど、パタン表現になるぐらいだから、ある程度は需要があるのかなと思います。
これら特殊表現は、サンプルが多く出てくると、表現を理解できて、使える人がたくさん増えてくるのかなと思います。

202 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 04:46:06 ]
タグ処理でよくあるんですけど、

<(.+?)>
<(.+)?>

は何か差があるんでしょうか。

203 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 07:21:56 ]
下は
<> や <abcd>>> みたいなのにもマッチするぞ

204 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:48:19 ]
>>201
正規表現を最適化するのに役立つ。
つまり「バックトラックしても無駄だ」っていうことを表明できる。



205 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:53:47 ]
実装はそうでしょうけど、使う方からすると気にしてませんよ。
そもそもそのバックトラックの違いで速度などの差が出るようなら、regexpライブラリ使わないでしょうし。

206 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:54:59 ]
>>205
お前が気にするか気にしないかは問題じゃない

207 名前:デフォルトの名無しさん [2008/09/04(木) 09:05:39 ]
おまえが気にするかとかよりも、バックトラックで問題が出るなら一般的には誰も使わないんじゃないですかね?
気にしてるのは、あなたの方ですよw

208 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 09:13:57 ]
だから俺は気にするといってるんだが…

209 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 10:46:12 ]
>>203
おお、そんなところに差があったんですか!感謝です!

210 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 11:01:52 ]
気にするって、まさか自分で実装してるんですか?
c のstring.h程度なら自力で実装できるんですけど・・・

211 名前:デフォルトの名無しさん [2008/09/04(木) 11:36:34 ]
正規表現の記事なんだが
やっと読み終わったぜ
codezine.jp/article/detail/1573

212 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 12:02:17 ]
バックトラックの量は正規表現を利用するだけの立場でも気にするべきことですよ。


213 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 12:05:02 ]
ところでそれ、実測しましたか?

214 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 12:30:14 ]
$unko =~ m!-_-!m;



215 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 13:20:26 ]
正直怖いです

216 名前:デフォルトの名無しさん [2008/09/15(月) 09:35:05 ]
/\w+/にマッチし
/end/にマッチしない
というのをひとつの正規表現で書くのはどうすればいいですか?


217 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 10:31:31 ]
否定読み

218 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 10:37:40 ]
!/\W|end/

勝手に /^\w+$/ だと思い込んでみた。

219 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 20:23:01 ]
サンクス
!//なんて技があるのか。
でもエディタの設定に//の中だけ書かなきゃいけないから使えないっぽい・・・
\b [^] |を駆使すれば出来そうだがめんどいな。

220 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:02:18 ]
//の中だけじゃ、ignoreとかのフラグはどうしてんの?

221 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:17:10 ]
チェックボックスがあるんだろ

222 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:23:31 ]
○○あいうえお□□123
○○かきくけこ○□345
○○あかさたな□○567
○○はまやらわ□□789
○○あいうえおかきくけこ

このような文字列の○○と□□を入れ替えるには
どうしたらいいのでしょうか?

※○□と□○はそのままにする

223 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:25:51 ]
(○○)(.*)(□□)(.*)
\3\2\1\4

224 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:59:03 ]
素早い返事ありがとうございます。
ただ、それだと2、3、5行目の○○が□□にならないです。



225 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 01:37:44 ]
s/○○/dummy/;
s/□□/○○/;
s/dummy/□□/;

226 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:29:17 ]
正規表現である文字を含まない行に一致させる方法はありませんでしょうか?

たとえば

あいう
えおか
きくけ

とこのようにあった場合「お」を含まない行「あいう」「きくけ」にマッチさせたいんですが

227 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:52:05 ]
grep -v お n.txt

228 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 00:47:11 ]
>226
多バイト文字に対応しているとして ^[^お]*$
だけど、大抵の正規表現処理系において >227 のように「マッチしない」を指定する方法があるので
そっちを使う方が賢明。

229 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 01:15:58 ]
>>227
>>228
レスありがとうございます。
すみません正規表現で文字処理するマクロソフト使用でしたので処理系があまり詳しくあえいませんでした。

^は基本でしたね、無事 ^[^お]*$ ですることが出来ました
ありがとうございます。

230 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 03:31:00 ]
しかし現行の正規表現って使いづらいよな。
読みにくく書きにくくしかも非力。もう駄目駄目。
2chの面白いレスにのみマッチするといった条件が記述できるくらい強力な
オブジェクト指向か関数型ベースの正規表現を作るべきなんだよ。

231 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 07:51:36 ]
文字列に対してオブジェクトや関数型ベースってどういう意味?

232 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:50:50 ]
ブラウザによってもjavascriptの動作変わりますよね

javascriptです。
123451234512345

このような文字列があった場合 /1[0-9]*5/g とするとどのようにマッチするかわかりますか?
このようにして使っていたんですが、ブラウザごとに違う動作をするようでうまくいきません。
IEでは12345  12345  12345 と三つにマッチするみたいです。
このような曖昧なものにするとだめなのでしょうか。
対処策などありましたらお願いします。

233 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 03:36:50 ]
いや、、、どうしたいの?

234 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 09:17:03 ]
貪欲マッチで「12345」にしかマッチしないのは変だな。



235 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 09:53:49 ]
Firefoxで以下を実行すると12345123451234にマッチする
javascript:alert("123451234512345".match(/1[0-9]*4/g));
もちろん
1[0-9]*5
に変えると全部にヒット
JavaScriptのエンジンまでとは言わないからせめてブラウザぐらい書いてくれ

236 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 09:57:10 ]
IEですね、本当にすみませんでした。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef