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


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

正規表現 Part8



1 名前:デフォルトの名無しさん [2011/03/26(土) 00:38:06.48 ]
正規表現(Regular Expression)スレです。

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

正規表現 Part7
hibari.2ch.net/test/read.cgi/tech/1268979408/

263 名前:デフォルトの名無しさん mailto:sage [2011/07/13(水) 02:16:06.17 ]
●正規表現の使用環境
Boost.Regex
●検索か置換か?
検索

●説明
文字列の要素を抜き出したい

●対象データ
[push x ='100' y= '200' name = 'aaa']
[ins x = '100' y='200' z='300' name='ppp']
●希望する結果
push
x
100
y 200
name aaa
-------------------
ins
x
100
y
200
z
300
name
ppp

\\[(\\w+) +(\\w+) *= *'(.*)' +(\\w+) *= *'(.*)' +(\\w+) *= *'(.*)'\\]
で、あらかじめ要素数が決まっていれば可能なのですが、
[A B='C' ...] と要素数が不定な数ある場合どうすればいいでしょうか?


264 名前: 忍法帖【Lv=21,xxxPT】 【東電 55.8 %】 mailto:sage [2011/07/13(水) 03:06:31.07 ]
Boost.Regex知らないからNCNRでお願いします
標準的正規表現で
[^\[\s='\]]+
これをグローバルマッチさせればいいんでないの
ただし、クオーテーション内に[]\s=は使用不可
イテレータとか違うのかな

265 名前:デフォルトの名無しさん mailto:sage [2011/07/13(水) 05:45:12.43 ]
>>263
例えば、一行目の
name aaa と
二行目の
x
100
の差が何によって起こるのかわからない。
オペレータ '=' と左右の空白は同一の
形式だと思うが。


266 名前:デフォルトの名無しさん mailto:sage [2011/07/13(水) 06:45:58.05 ]
●正規表現の使用環境
PHP 5.2.5

●検索か置換か?
置換

●説明
<a>でリンクされていないURLだけをリンクしたい

●対象データ
<a href='aaaaaa/aaa'>aaaaaa/aaa</a>
<a href='aaaaaa/aaa'>bbb</a>
aaaaaa/aaa
aaaaaa/aaa

(httpの前に改行は無いです)

●希望する結果

<a href="aaaaaa/aaa">aaaaaa/aaa</a>
<a href="aaaaaa/aaa">bbb</a>
<a href="aaaaaa/aaa">aaaaaa/aaa</a>
<a href="aaaaaa/aaa">aaaaaa/aaa</a>


↓これではダメでした。。
/((?![\"\'>])(https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)(?![\"\'<]))/



267 名前:デフォルトの名無しさん mailto:sage [2011/07/13(水) 06:59:17.97 ]
>>263
while や for で何度もマッチさせるんだよ

268 名前:◆oDupeixhZv52 mailto:sage [2011/07/14(木) 09:10:15.15 ]
>>266
/((?<![\"\'>])(htt〜

269 名前:デフォルトの名無しさん mailto:sage [2011/07/15(金) 03:48:07.73 ]
>>268
エラーになってしまいます

[^\=\"\'>](https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
これでできたので、とりあえず書いてみます。

270 名前:デフォルトの名無しさん mailto:sage [2011/07/18(月) 07:06:17.74 ]
いつもお世話になっております。
>>261
この ('table.boardFin tr')というのは、Xpath、正規表現、またはnokogiri専用の表記のうち
どれにあたるのでしょうか?ぐぐってみても見つからずどうやって、この辺の表記の仕方を勉強すればよいでしょうか?

271 名前:デフォルトの名無しさん mailto:sage [2011/07/18(月) 10:07:57.66 ]
>>270
rubyは触ったことないけど、そのいずれにも当てはまらなくね?
どう見てもCSSセレクタの表記にしか見えない



272 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 03:05:23.86 ]
>>270
>>271の言うとおりただのCSSセレクタ
意味は「クラス属性のひとつがboardFinのtable要素 の 子孫要素 の tr要素」
id属性だけで特定できるならxpathが簡単だけど、クラス属性を使わないと特定できないなら
属性を簡潔に書けるCSSセレクタの方が好きかな。
Nokogiriはどっちにも対応してるし、ちゃんぽんにしても書けるみたい。

273 名前:270 mailto:sage [2011/07/19(火) 19:57:43.31 ]
>>271>>272
ありがとうございます。CSSセレクタ勉強します。

274 名前:270 mailto:sage [2011/07/20(水) 00:30:34.52 ]
>>272
重ね重ね申し訳ないのですが、

map{|e| e.children.map(&:content).reject{|ee| ee == "\n"}}について

.reject{|ee| ee == "\n"}これは、改行の\nを取り除くということは、わかったのですが

.map{|e| e.children.map(&:content)

はchilderenの中の数字の部分を取り出すという意味だとおもうのですが
&:content ここの部分がどこを指すのか、わかりませんでした。

HTMLソースの<meta http-equiv="Content-Type" content="text/html; charset=utf-8">に
contentという文字を見つけたのでここ由来でテキスト表記を取り出すという意味なのかなと考えて
いますが、あっていますでしょうか?
また&:はどういう意味で下記で言えばどこの部分になるのでしょうか?

[#<Nokogiri::XML::Element:0x1def1d8 name="td" children=[#<Nokogiri::XML::Element:0x1def1d8 name="td" children=[#<
1def156 "2011\345\271\2647\346\234\21019\346\227\245">]>,#<Nkogiri::XML::Text:0x1db3f84 "\n">

よろしくお願いします。

275 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 00:33:39.01 ]
なぜそれを正規表現スレで聞く

276 名前:270 mailto:sage [2011/07/20(水) 00:59:54.16 ]
>>275
申し訳ないです。
最初は正規表現で抜き出そうとしていたのですが、XMLパーサーの方がよいというアドバイスをうけ質問を続けてしまいました。
あと、272さんに是非聞いてみたくて、これを最後にここでのXMLパーサーの質問はやめます。

277 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 03:11:53.36 ]
>>274
contentはNokogiri::XML::Nodeクラスのメソッドでノード(要素)の中身(文字列or nil)を取り出す。
enum.map(&:meth)はenum.map{|e| e.meth}の簡略表記。
スクレイピングはライブラハックみたいな事件もあるから注意してやってね。
これ以降はRubyスレで。

278 名前:255 mailto:sage [2011/07/20(水) 04:38:35.98 ]
>>277
大変ありがとうございます。勉強になりました。
ライブラハックぐぐってみました、自分が買ったシステムトレードの本にも
アクセスは10秒に一回程度にしてと書いてありましたし、人様に迷惑のかからない範囲で
最新の注意を払ってやります。

279 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 12:40:03.46 ]
●正規表現の使用環境
C# 4.0

●検索か置換か?
置換です

●説明
HTMLファイルのソースコードの
<script type="text/javascript">〜省略〜</script>
scriptタグ開始を含めてscriptタグ終了タグまでを消去したいんです

●対象データ
<script type="text/javascript">
<!--
// 〜コメント〜
内容
// -->
</script>

<script type="text/javascript" src="script.js"></script>

上記のどちらも以下のものでやったのですが、どうもヒットしません
<script\s[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#'""]+>[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#]+\</script>

解答よろしくお願いします

280 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 16:06:12.44 ]
C#分からんけど、こんなのでどう?
<script\s[\s\S]*?<\/script>

281 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 18:56:01.78 ]
>>279
DOMで消したほうが確実ではないか?
属性としてもJavaScriptとかつけれるわけだし



282 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 22:49:53.78 ]
○ds
○nds
○gameds
○gamends
×legends
検索したときに、○だけヒットさせるにはどうすればいいか教えてください

283 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 22:56:39.12 ]
ds|nds|gameds|gamends

284 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 23:31:06.88 ]
(?<!legen)ds

285 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 23:33:12.65 ]
(game)?n?ds

286 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 23:50:06.43 ]
\b(ds|nds|gameds|gamends)\b

287 名前:デフォルトの名無しさん mailto:sage [2011/08/06(土) 00:25:08.04 ]
○(?=ds|nds|gameds|gamends)

288 名前:デフォルトの名無しさん mailto:sage [2011/08/06(土) 00:56:27.17 ]
たくさんの回答ありがとうございます
うまくできました

289 名前:デフォルトの名無しさん mailto:sage [2011/08/06(土) 01:04:00.57 ]
どれでうまくできたんだよ
毎度のことだけどヤレヤレだな

290 名前:デフォルトの名無しさん mailto:sage [2011/08/07(日) 03:15:33.89 ]
●正規表現の使用環境
Emacs Lisp

●検索か置換か?
検索

●説明
C++などでよく使われる構文にマッチさせたい。
具体的にはクラスインスタンスへのアクセスアローやドットにマッチさせたい。

●対象データ

class A;
A a;
A* a_ref = &a;

a.m_hoge;
a->m_hoge;

●希望する結果
これにマッチさせる場合
"\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\="
が正解らしいですが
なぜ正解かわからない部分があるので教えてください。
まず"?"演算子の使い方ですが・・・直前の文字列(空文字込み)にマッチさせるために置いてあるとして
直後の ":"が理解不能です。
後半でも、":"が出てきますがこれも不可解。名前空間の"::"などにマッチさせたいのであれば
::や:?:とかならわかるのですが・・





291 名前:デフォルトの名無しさん mailto:sage [2011/08/07(日) 04:32:22.75 ]
>>290
> 直前の文字列(空文字込み)にマッチさせるために置いてあるとして
?の後ろの文字(列)で意味が変わってくるんですよ
とりあえず、>>2のサイトを?:で検索してみて



292 名前:デフォルトの名無しさん mailto:sage [2011/08/07(日) 13:44:09.10 ]
>>290
(?:pattern) は変数にキャプチャしない

293 名前:デフォルトの名無しさん mailto:sage [2011/08/07(日) 23:22:49.99 ]
●正規表現の使用環境
LINUX grepコマンド

●検索か置換か?
検索

●説明
ドットで行に一文字追加されたもののみ検索したい

●対象データ
ABC
ABCD
ABCDE

●希望する結果
ABCD

grep ABC. sample.txtとしても
結果 2文字追加されているABCDEまで出てきてしまいます。。。
ドットは一文字と習ったのですが、
なぜなのかわかりません・・。

294 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 00:39:46.75 ]
^ABCD.$

295 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 00:51:07.33 ]
>>291
> > 直前の文字列(空文字込み)にマッチさせるために置いてあるとして
> ?の後ろの文字(列)で意味が変わってくるんですよ
> とりあえず、>>2のサイトを?:で検索してみて

>>292
>(?:pattern) は変数にキャプチャしない

>>2で調べて解決しました。
正規表現はマッチング程度しかつかってなかったので
後方参照とかあまり考えたことなかったですね。
?:をつかっていた解答はパフォーマンス等を気にしていたのかな・・・。
いろいろ勉強になりました。ありがとう。




296 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 01:01:24.59 ]
>>294
Dが余計

297 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 16:27:24.00 ]
お願いします

●正規表現の使用環境
Hex Editor Neo

●検索か置換か?
検索

●説明
1文字目と3文字目が同じで、2文字と目と4文字目が同じの4文字の文字

●対象データ
ABAB
PAPA
0101


298 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 16:35:50.95 ]
>>297
(.)((?!\1).)\1\2

299 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 20:35:16.89 ]
1文字目≠2文字目 は別に条件に入ってなくね?

300 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 22:51:52.90 ]
んだんだ

301 名前:297 mailto:sage [2011/08/12(金) 23:36:38.97 ]
>>298
ありがとうございました。
目的のデータを探す手がかりが出来ました。
ヒットが多いので応用して絞り込みます。
\1を否定しているところがよく解らないので、ここを勉強してみます。

御世話になりました。




302 名前:デフォルトの名無しさん mailto:sage [2011/08/13(土) 14:26:16.55 ]
>>299
実は入ってる

まあ、説明で「1文字目と2文字目は別文字とする」と明確に書くのが一番だが
その説明が無い場合、というか「1文字目と2文字目が同じ場合を含む」あるいは
「連続する4文字が全て同じ場合を含む」などの条件が明確に書かれている場合を除いて
>>297の説明だけでも1文字目と2文字目は別文字と解釈するのが正解

303 名前:デフォルトの名無しさん mailto:sage [2011/08/13(土) 14:55:39.43 ]
そんなバナナ!

304 名前:デフォルトの名無しさん mailto:sage [2011/08/13(土) 15:21:36.42 ]
>>302 とは仕事したくない。

305 名前:デフォルトの名無しさん mailto:sage [2011/08/13(土) 15:33:36.73 ]
>>302の人気に嫉妬

306 名前:デフォルトの名無しさん mailto:sage [2011/08/13(土) 16:15:41.73 ]
以前会社にいた山田君を思い出した

307 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 07:18:27.49 ]
むしろ>>302を理解できないような融通の利かない奴とは仕事したくないな。
常識的に解りそうなことでも、事細かに指示や伝達をしないと、
そんなこと言われてないとか屁理屈でゴネるような奴と仕事するとフォローやストレスで大変そうだ。

308 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 07:51:21.44 ]
勝手な思い込みで仕事をしてもらっては困る
なぜ一言俺に聞かなかった(ドスンッ

まで読んだ

309 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 09:14:21.19 ]
「あ〜、そこは適当にやってもらえばいいから」って言ってた客が、出来上がり
見て「そこは、こう動くのが当たり前だろ」って言う手のひら返しする話をよく聞
くが >>302=>>307 みたいな奴に当たったんだろうな。

まあ、文句言われても「適当にやってもらえばいいから」って言うのを議事録に
書いとくしかないわな。

310 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 20:34:31.83 ]
くが?

311 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 21:45:09.82 ]
1行の文字桁数制限が無いか、あるいは大きなところでまで
固定桁数で改行入れて読みにくい文章書く子って未だに居るよね
そういった書き方見ても、書いてる内容見ても、程度が知れるってものだ



312 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 21:46:59.96 ]
>>311
>>302さんおちついてください

313 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 22:52:31.95 ]


314 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 23:16:13.06 ]
>>311
>>311

315 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 23:32:34.98 ]
多くの人に嘲笑されている現実と、自分に反する意見を投げかけているのは皆同一人物という妄想との、区別が付かない人。

316 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 00:00:50.15 ]
どう考えたって一人だろうw

317 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 01:17:16.22 ]
>>316
1人だって?プ

318 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 07:40:32.80 ]
最低でも2人は居る

319 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 07:45:56.92 ]
一人ってのは>>302,307,311,315が同一人物ってことね
それにツッコミや茶々入れてる人は当然含めてないよ

320 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 08:04:15.29 ]
11人いる!

321 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 10:43:10.13 ]
>>309
まさかとは思うが、「適当」≠「適切」だと思っている残念な人?
(指示を出すまでもない当たり前のことだから使用には詳細に書いていないけど)適当にやってくれ。
言わせんなよ、恥ずかしい。



322 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 11:58:59.29 ]
詳細以前にスレタイ読もうよ。

323 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 13:08:30.17 ]
>>297をを読んで
「指示を出すまでもない当たり前のことだから仕様には詳細に書いていないけど1文字目≠2文字目だから」
と自信満々言い切る人間がこの世に存在するという事実が、なんというか、すごいです。

324 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 13:12:54.50 ]
>言わせんなよ、恥ずかしい。

確かにあんな的外れ恥ずかしくて普通は言えないw
そこをあえて言った勇気に敬意を表するw

325 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 14:03:14.42 ]
そうだね、>297には一致とも不一致とも書かれていないのだから、
どちらの場合も考慮するのが正しいエンジニアリングだね。
だからと言って、2chの回答にそれを求めるのは間違いだと思うが。

326 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 16:31:31.26 ]
推して知るべし

って言葉を知ってるかい?

327 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 16:42:06.95 ]
それは知ってるが、知ってるからといっていつもそれを適用しちゃだめだろ。

328 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 16:53:51.04 ]
正規表現 Part8

って言葉を知ってるかい?

329 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:01:32.21 ]
仕事と2chを一緒にする馬鹿が多いな
仕事なら仕様としての抜けを確認するのが普通だが
2chなら別に通常普通ならこういう動作を求めるであろう答え書いてやれば十分だろ



330 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:09:41.59 ]
仕事でなければバグを指摘しなくていい、とは画期的な意見だな

331 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:25:26.04 ]
バグであるかどうかは本人以外わからん事だろ



332 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:30:18.46 ]
>>321
指示を出すまでもない当たり前のことが標準化されてない事実にいい加減気付け

333 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:37:02.85 ]
指示を出すのは仕事の話だろ
2chで指示を出す奴はいない

334 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 17:39:37.48 ]
要するに自分では自明だと思っていたことが
他の人にとっては自明でもなんでもなかったって話だね

335 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 21:43:57.75 ]
ローカルルールさえ守れない間抜けどもがグローバルルールを語るお笑いスレはここですか?

336 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 06:06:50.67 ]
http://何が来るかわからない.何が来るかわからない.test.com/何が来るかわからない
http://何が来るかわからない.test.com/何が来るかわからない

上の2つともにマッチさせる正規表現は、どのように書くのでしょうか?


337 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 06:27:00.18 ]
>336
"何が来るかわからない"が'.'を含むなら上と下は同じになる。
たぶん"何が来るかわからない"に含まれない文字はわかっているはずだし、
ホスト名/ドメイン名部分の"何が来るかわからない"と
パス部分"何が来るかわからない"の文字種は異なるはず。


338 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 07:28:43.87 ]
>>336
例えばこんな感じかな?
(「何が来るかわからない.」という部分が1〜何個続いてもマッチする)
http:\/\/([^.]+\.)+?test\.com\/[^\s]*

URLの検索に使う正規表現は用法によって様々
これで問題あれば>>4のテンプレを埋めて詳細に質問すべし

339 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 13:33:04.04 ]
>>338
>これで問題あれば>>4のテンプレを埋めて詳細に質問すべし
テンプレ云々以前に問題ありまくりだろ
その正規表現だと、例えばこういうのまでマッチするわけだが

1249719652/#q=www.test.com/&hl=ja

つか[^\s]*とかもはっきりいって意味不明だし、全然分かってないだろ

340 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 15:55:21.23 ]
非難する暇があるなら、正解を教えてあげればいいのに。

こんなんではどう?
http:\/\/(.*\.)*test.com\/.*

341 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 15:58:31.19 ]
>>340
> 正解を教えてあげればいいのに。
と言いながら、正解を教えず、間違いを教えて騙すのは如何なものかと



342 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 16:09:10.46 ]
それは正解じゃないだろw
https?:\/\/(?:[^./]+\.)*test.com\/\S*
まだやるならこうじゃね?
RFC的には何でもOKになったんだっけか・・・・?


343 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 16:11:47.58 ]
http:\/\/(\w+\.){1,2}test\.com\/\w+

344 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:25:00.45 ]
「何が来るかわからない」の部分が、ドットは勿論のこと
スラッシュを含まないとは一言も書かれていないな。
これは".test.com/"がパスの構成部分である可能性を排除しない。

オレはまた>>297からの流れで、スレ住人が試されてんのかと思っちまった。

345 名前:343 mailto:sage [2011/08/16(火) 18:44:45.50 ]
\w は - にマッチしないからまずいね
代わりに [-A-Za-z0-9_:]

346 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:45:40.85 ]
コロンいらないな。スレ汚し失礼

347 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:48:47.82 ]
URLにID,PASSを記述する時には:だけでなく@も必要になるが

348 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:58:11.17 ]
たしかに。ホスト名の前に来るから省いちゃ駄目か

349 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 21:34:39.53 ]
>>344
スラッシュを含まないとは書いてないから、別ドメインでも構わないってどんな思考してるんだよ
そういうのを屁理屈っていうんだよ

350 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 21:37:56.54 ]
でも>>297からの流れだと>>344の言うことには一理あるw


351 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 21:44:07.04 ]
まああれが URL であるって定義もないしな。w



352 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 21:47:25.58 ]
>>344の回答が見てみたいな

353 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 00:31:19.22 ]
.*

これは>>336の要求(「上の2つともにマッチさせる正規表現」)を完全に満たす。

354 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 00:38:21.83 ]
>>353
URLであるとは書かれてないから、ドットの連続も認められるとでも言いたいのか?
ほんと馬鹿じゃね?それより夏休みの宿題は終わったか?

355 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 00:47:35.48 ]
>354がRFC的に妥当なURLのみマッチする
(=RFC的に無効なURLにはマッチしない)
正規表現を書いてくれるらしいので期待

# まさか「.*」を「ドットの連続」と読んだ
# ってオチじゃないよね...?

356 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 00:59:29.07 ]
>>355
># まさか「.*」を「ドットの連続」と読んだ
># ってオチじゃないよね...?

お前やっぱ馬鹿だったんだな・・・
.* は改行文字を除く1文字の0回以上の繰り返し
したがってRFCの仕様に反してドットの連続も認められるってことになる

まともな正規表現が書けないなら黙ってろよ

357 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:15:00.57 ]
それ全部理解してるからこその>>355のレスになってると思うんだが・・・

358 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:15:19.79 ]
>>353は小論文で自由に論じなさいと言われて
本当に自由に論じて0点喰らうタイプ

359 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:25:48.91 ]
でもAO入試でひとりから絶賛されるタイプ

360 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:28:38.50 ]
「やっぱ」って、このスレに書いたの
数ヶ月ぶりなんスけど...(^^; ナニコノヒト

> したがってRFCの仕様に反してドットの連続も認められるってことになる

o.k.
つまり「RFCに沿ってドットの連続を認めない
正規表現を書かなければならない」
という意図の発言だったってことね > ドットの連続云々

# だから>355(の前半部)の発言になってるんだけど...
# >357さん、正解です :)

ちなみに、RFC的制限のほんの一例ですが、
ドットによって区切られた各ラベルの先頭及び末尾に
ハイフンを用いてはならないのは当然ご存知ですよね?
(見たところ、この制限を反映させた回答は出ていないようですが...)

では引き続き、>354さんがRFC的に妥当なURLのみ
マッチする(=RFC的に無効なURLにはマッチしない)
正規表現を書いてくれることに期待

361 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:43:35.22 ]
URIのマッチングにRFCに照らして〜とか正気で言ってんのか?

( ゚,_ゝ゚)バカジャネーノ




362 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 01:46:11.55 ]
答えが出なかったら>>360が正解を書いてくれるんだろう
それはそれでスレにとって有益なんじゃないか

363 名前:355=360 mailto:sage [2011/08/17(水) 01:50:35.97 ]
>361
ぃゃ、ワタシもそこはテキトーに済ましときゃ
いい部分じゃないかと思っているんですが
(でないと泥沼にはまるのは目に見えてるんで)、
ワタシじゃなくて>356さんにとっては
譲れない部分みたいなんで...(^^A;;

364 名前:355=360 mailto:sage [2011/08/17(水) 01:54:45.51 ]
>362
いえ、ワタシは「それは現実的じゃない」派なんで
(従って*ワタシは*正解を出せません)、
だからこそ>356さんの回答に期待している
というわけなのです :)
(相当に自信がおありのようなので)

365 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 02:04:23.82 ]
ま、連続ドット禁止規定のみ反映させて他は反映させない、ってのはネェわな
他にどんな規定があるのかは知らんが

以前どこかで見たRFC的妥当性を考慮したURLの正規表現は
もはや「ほとんど何にでもマッチするような表現」だったような記憶がある・・・

366 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 02:13:33.46 ]
メールアドレスをRFC完全準拠で抽出しようとすると
携帯メアドの一部を取りこぼしちゃうのは有名な話

367 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 10:59:03.55 ]
一部のキャリアがRFC非準拠なアドレスを許してるのは有名な話、と、はっきり書こうよw

368 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 18:27:55.92 ]
Not All RFCs are Standards.

369 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 19:29:11.74 ]
だからなんだ。
白いカラスがいたからって「カラスは白い」って主張が正しくなるわけじゃない。

370 名前:297 mailto:sage [2011/08/17(水) 20:26:18.19 ]
以前は大変御世話になりました。
で、自分がいい加減な文章を書いたせいで誤解を招く結果になり、申し訳ありません。
自分の意図は、「1文字目と2文字目は異なる」というものでした。
ですから、教えていただいた方法で正しかったですし
おかげで目的のデータを見つける事ができました。

皆さんを試すとかそんな気は一切ありません。
ただ自分の説明がいたらなかっただけです。申し訳ありません。
そして、どうも有り難う御座いました。


371 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 20:57:31.71 ]
正規表現だけが唯一習得出来ないスキルだ。


難しい。



372 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 20:57:50.76 ]
「まともな正規表現が書けないなら黙ってろよ」とか豪語してた>>356の自信作はまだですか?

373 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:02:18.65 ]
書けないから黙ってるんじゃね?

374 名前:344 mailto:sage [2011/08/17(水) 21:06:37.05 ]
>>370
ああいう流れの中で>>336が投下されたもんだから、もしかして
「この質問でも先と同じ屁理屈をこねてみせるのか?」と誰か(=336)が
スレ住人を試しているのかと思っちゃった、って話だから気にしなくていいよ。
君のことを言ったわけじゃない。紛らわしくてすまん。

375 名前:think49 ◆bKk/qcAKuM mailto:sage [2011/08/17(水) 21:21:28.81 ]
RFC3986準拠ならこんな感じ。意外とフリーダムです。
https://gist.github.com/770087

376 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:41:05.10 ]
think49こんな所にも出没してたのかw

377 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:48:57.62 ]
煽りが多いな

378 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:55:14.27 ]
a://hoge/ も有りなのか…

379 名前:デフォルトの名無しさん mailto:sage [2011/08/18(木) 10:32:51.42 ]
あほ毛w

380 名前:デフォルトの名無しさん mailto:sage [2011/08/26(金) 13:40:20.27 ]
test

381 名前:デフォルトの名無しさん mailto:sage [2011/08/27(土) 16:55:45.83 ]
●正規表現の使用環境
C# 4.0

●検索か置換か?
置き換え

●説明
html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換えたい
ためしに<dd>とだけやってみましたが、<dd>タグは置き換えされませんでした

●対象データ
<dd>文章1</dd>
<dd>文章2</dd>

●希望する結果
文章1
文章2



382 名前:デフォルトの名無しさん mailto:sage [2011/08/27(土) 19:21:21.89 ]
すいません、自己解決しました


383 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 08:52:43.84 ]
よろしくお願いします

●正規表現の使用環境
Perl

●検索か置換か?
置換

●説明
数が一桁の場合、0を加えて二桁に整形したい

●対象データ
2010年5月9日
2011年11月12日
2011年4月30日
2011年6月1日
2011年8月20日

●希望する結果
2010-05-09
2011-11-12
2011-04-30
2011-06-01
2011-08-20

384 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 09:23:11.79 ]
^(\d{4})年(\d\d?)月(\d\d?)日
\1-\2-\3

-(\d)(?=[^\d]|\n)
-0\1

385 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 10:41:45.33 ]
>>384
ありがとうございます

386 名前:デフォルトの名無しさん [2011/08/28(日) 16:51:25.87 ]
こういう風に画像を置換したいのですが、正解を教えてください

*.akamaihd.net/*/*/*.jpg

*.akamaihd.net/*/*/o.jpg

.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(.+?\/){2}.+?-).+\.jpg$/i,"$1o.jpg")


*.fc2.com/*/*/*/*/*/*.jpg

*.fc2.com/*/*/*/*/*/digest_*.gif

.replace(/(http:\/\/[^/]+\.fc2\.com\/(.+?\/){5}.+?-).+\.jpg$/i,"$1digest_$2.gif")

387 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 17:23:14.67 ]
urlは面倒なので手抜き

/[^/]+\.jpg
/o.jpg

/([^/]+)\.jpg
/digset_\1.gif

388 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 17:27:49.72 ]

^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$

^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$

389 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 18:09:38.56 ]
以下で動作しませんでした

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$/i,"$1/o.jpg")

.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$/i,"$1/digset_\1.gif")

390 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 18:44:06.57 ]
>>389
>$1/o.jpg
>$1/digset_\1.gif

なんでわざわざ改悪するんだよ?馬鹿なの?死ぬの?

391 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 19:04:41.07 ]
[^./]の.ってエスケープしなくてもいいの?



392 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 19:21:09.39 ]
以下で動作しませんでした

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$)
.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$)

.replace(/^(http:\/\/[^./]+\.akamaihd\.net\/(?:[^/]+\/){2})[^./]+\.jpg$/o.jpg)
.replace(/^(http:\/\/[^./]+\.fc2\.com\/(?:[^/]+\/){5})([^./]+)\.jpg$/digset_\1.gif)

/([^/]+)\.jpg
/digset_\1.gif
の入れ方を教えてください

393 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 19:37:53.37 ]
>>387>>388は別人だから組み合わせてもうまくいかないよ
あと言語が何なのか言っといたほうがいい

394 名前:デフォルトの名無しさん [2011/08/28(日) 21:01:52.17 ]
>>393
すいません 言語は分かりませんが
普通のユーザースクリプトに使用します。

分かる人は正解を教えてください
おねがいします

395 名前:デフォルトの名無しさん mailto:sage [2011/08/28(日) 23:59:16.34 ]
>>391
もちろん必要ない。

396 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 00:55:09.24 ]
>>394
言語もソフト・アプリ名も言わないの?
それじゃ不明瞭極まりない
何の「普通のユーザースクリプト」か、くらいは説明できるでしょ
最初からテンプレに沿って質問を書いたほうが早道なのになー

397 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 01:07:04.98 ]
なかなか気が狂ってて笑える

398 名前:デフォルトの名無しさん [2011/08/29(月) 02:16:27.36 ]
>>396
ウインドウズのブラウザ(chrome)のユーザースクリプト(拡張)に使うんですけど
script.jsです

399 名前:デフォルトの名無しさん [2011/08/29(月) 02:39:44.50 ]
var url = (
location.href
.replace(/^(http:\/\/[^/]+\.ggpht\.com\/(?:[^/]+\/){4})s[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/[^/]+\.googleusercontent\.com\/(?:[^/]+\/){4})[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/[^/]+\.bp.blogspot.com\/(?:[^/]+\/){4})[^/]+\/([^/]+\.[^/]+)$/, "$1$2")
.replace(/^(http:\/\/.+?\.photobucket\.com\/(.+?\/){3})th_(.+?\.[^/]+)$/i,"$1$3")
.replace(/^(http:\/\/img\.pics\.livedoor\.com\/(.+?\/){3}.+?-).+\.jpg$/i,"$11024.jpg")
);
if(url !== location.href){
location.replace(url);
}

400 名前:デフォルトの名無しさん [2011/08/29(月) 02:45:32.26 ]

のような形式で
>>386の置換がが動作する記述を教えて欲しいのです。

401 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 03:51:28.85 ]
>>398-400
Google Chromeのユーザースクリプトね
最初にちゃんと説明しようぜ

.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")

ちなみにこのスクリプトの言語はJavaScriptですよ
だからscript.jsと、jsが付いてる



402 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 04:00:33.68 ]
エロサイトの画像を一括DLでもしたいんかね

403 名前:デフォルトの名無しさん [2011/08/29(月) 10:03:56.24 ]
●正規表現の使用環境
Excel VBA

●検索か置換か?
置換

●説明
<>で囲まれた文字列を空白に置換したい。

●対象データ
あいうえお<ほげほげ>かきくけこ
みかん<りんご<すいか>ぶどう>メロン

●希望する結果
あいうえおかきくけこ
みかんメロン

---
検索:<*>
置換:
---
というふうにすると、
一番目の例に対してはうまくいくのですが、入れ子になっている場合にうまくいきません。
↓のような結果になってしまいます。
みかんぶどう>メロン


お願いします。

404 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 11:07:11.10 ]
<[^<>]+>
で何度か置換

405 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 12:11:43.97 ]
>>403
<(?:[^<>]*<[^<>]*>)*[^<>]*>

406 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 12:26:37.49 ]
>>405
いちご<みかん<りんご<ぶどう>パイナップル>マンゴー>レモン

407 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 13:52:51.51 ]
正規表現だと基本的に有限のネストへの対応しかできないんじゃなかったっけ。

408 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 17:17:06.32 ]
>>403
<(?:[^<>]*<)*(?:[^<>]*>)*[^<>]*>
括弧の対応関係を保証するなら複数回マッチさせる必要がある

409 名前:デフォルトの名無しさん [2011/08/29(月) 18:42:33.91 ]
>>401
ありがとうございます

しかし
.replace(/(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
で動作しませんでした
.replace(/^(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/^(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
でも駄目でした


410 名前:403 mailto:sage [2011/08/29(月) 21:09:00.42 ]
>>404,405,408さん
ありがとうございました。

411 名前:デフォルトの名無しさん mailto:sage [2011/08/29(月) 21:48:15.16 ]
>>409
ttp://userscripts.org/scripts/review/87889

ぐぐってみたらベースはこれみたいだけど、ちゃんと @include 追加してるのかね?



412 名前:デフォルトの名無しさん mailto:sage [2011/08/30(火) 02:23:53.96 ]
>>409
ああすまん、先頭の^をコピペミスしてたな
.replace(/^(http:\/\/[^/]+\.akamaihd\.net\/(?:[^/]+\/){2})([^/]+\.jpg)$/i,"$1o.jpg")
.replace(/^(http:\/\/[^/]+\.fc2\.com\/(?:[^/]+\/){5})([^/]+)\.jpg$/i,"$1digest_$2.gif")
が正しい
まあ、あっても無くても動作するんだけどな
後は>>411が指摘してくれた通り@includeでしょ

413 名前:デフォルトの名無しさん [2011/08/30(火) 23:14:48.30 ]
>>411
@includeを登録するのを忘れていました

>>412
動作しました
ありがとうございましたm(__)m

414 名前:デフォルトの名無しさん [2011/08/31(水) 23:22:12.28 ]
ttp://msdn.microsoft.com/ja-jp/library/ff650303.aspxから拝借した
^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$
を使ってメールアドレスの書式チェックを行っているんですが、
40文字とか多めの文字数で不一致の文字列を試すと、
フリーズしてしまいます。

一致するケースは問題ないんですが。。。
一致しない時はバックトラッキング?が発生している?
実装言語はaspです。

対象文字列が長くて不一致のケースでも、
動作に問題のない一般的なメールアドレスを許容する表現があれば教えて下さい

415 名前:デフォルトの名無しさん mailto:sage [2011/08/31(水) 23:49:58.59 ]
組み合わせ爆発が起きてるかな?

416 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 02:38:37.05 ]
前半の ([-.\w]*[0-9a-zA-Z])* が原因だと思う
なにがやりたかったんだこれ

417 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 08:59:22.45 ]
あやしげな奴でもパスさせてしまって、あとでエラーになったらそこでどうにか
リカバリーする、という方針なら適当なパターンでやればいい。

実際に使われているアドレスでもエラーになるかもしれないが、厳密にマッチ
する奴が欲しいなら、RFC 5322 正規表現、とでも検索すればむたくた長い奴が
出てくるからそこらへんを参考に。

418 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 13:10:51.42 ]
テキスト中の行頭 ; という記号を置き換えようしています
'^\;'とかいたらマッチしません

次に ^\;.* と書いたらマッチするものの
行頭に;がある行の一列すべてがマッチしてしまいます

一体どう書けばよいのでしょうか?

419 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 13:25:11.38 ]
環境は何よ?
とりあえずセミコロンに \ はいらない

420 名前:418 mailto:sage [2011/09/01(木) 14:10:27.15 ]
>>419
失礼しました
秀丸の置換です

421 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 14:56:50.28 ]
それなら普通にこれでできるんじゃないの?

^;



422 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 15:54:21.54 ]
>>421
できました。どうもありがとうございます

423 名前:デフォルトの名無しさん mailto:sage [2011/09/01(木) 16:54:17.50 ]
(;^ω^)

424 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:25:41.47 ]
おつかれさまです。
現在、ニコ生用にゆっくりがコメントを読み上げるソフトウェアを開発しております。
環境は Mac Objective-C でライブラリに RegexKit を利用しております。
質問は正規表現自体に関するものです。

「ww」などを「わらわら」と読ませるために
[WwWw][WwWw]+
とやっているのですが、

「ないすw」など、一文字の「w」記号を「わら」と読ませるのに苦労しております。
「w」全てで引っ掛けるのではなく、
英単語ではないもののみにしようとしております。
なので、
what -> x
いいw -> ok
w -> ok
how -> x
などというような判定を行いたいです。
対象は「大文字小文字、全角半角」のwです。

もしよろしければ、アドバイスいただけないでしょうか。
よろしくお願いします。

425 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:39:21.17 ]
書き忘れましたが、
判定は [^a-zA-Z]*[WwWw][^a-zA-Z]*
としてできているのですが、
「わら」とおきかえる場所は真ん中のみにしたいです。

上記の判定式のまま書くと、
「いいw」 -> 「わら」
となります。
これを
「いいワラ」
としてやりたいです。

426 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:40:40.28 ]
すいません。上記のもやはり挙動がおかしいです。
何度も申し訳ありません。

427 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:40:53.17 ]
s/^([wWwW]+)$/わら/g;
s/([ぁ-んァ-ン亜-Kー])([wWwW]+)$/$1わら/g;

428 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:41:28.43 ]
コードは UTF-8 として、
(?<![a-vx-zA-VX-Z])([Ww]+)(?![a-vx-zA-VX-Z])

前後に wW 以外のアルファベットが含まれていない [wW]+ にヒット。

429 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 11:46:35.45 ]
>>427
すいません。文字化けで読めないです。

>>428
かなりおしいですw
少し試しましたが、文頭と文末以外だとOKっぽいです。

430 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 12:06:26.64 ]
(^|[^A-VXYZa-vxyz])([WwWw])\2*\b

$1わら

431 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 12:24:46.64 ]
みなさま、ありがとうございました。
以下のような順番に置き換えていく実装で期待通りの動作をしました。
集約できておりませんが、
計算量的に問題になっていないので、特にバグがなければこれでいきます。

NSMutableString *subjectString = [NSMutableString stringWithString:kanjiString];
NSString *regexString = @"[WwWw][WwWw]+";
NSString *replacementString = @" ワラワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"(?<![a-vx-zA-VX-Z])([WwWw]+)(?![a-vx-zA-VX-Z]) ";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"^([WwWw]+)(?![a-vx-zA-VX-Z])";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];

regexString = @"(?<![a-vx-zA-VX-Z])([Ww]+)$";
replacementString = @" ワラ ";
[subjectString match:regexString replace:RKReplaceAll withFormat:replacementString];



432 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 12:50:33.80 ]
適切に場合分けしてやると、より精度が上がって面白いかもね

しかし、これが分からん
[WwWw][WwWw]+
こうじゃないの?
[WwWw]+
全角半角も変わってるから注意

433 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 12:51:36.21 ]
>>432
wwwwwwwww → ワラワラ
w → ワラ

と書いてあるだろ

434 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 12:57:59.24 ]
>>433
[WwWw][WwWw]+ = [WwWw]{2,}

[WwWw]+ = [WwWw]{1,}

つまり

[WwWw]{1,} ⊃ [WwWw]{2,}

それなのに [WwWw]+ も ワラ に置換するのはおかしいだろ

435 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 13:14:35.80 ]
>>434
ヒットしないから無問題。つまり無駄な箇所。

436 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 13:16:19.84 ]
>>433
ああすまん、2文字以上の場合と理解してたのに勘違いしちまった
>「ww」などを「わらわら」と読ませるために
2文字以上でワラワラね
むしろ他の場所の[WwWw]+が微妙におかしいのか

でも全半角もおかしいぞーWWWWWwwwwwWWWWWwwwww

437 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 14:43:51.82 ]
やだなにこのスレ
草伸びまくってる

438 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 14:48:28.10 ]
W杯とかどうなるの?


439 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 15:09:20.11 ]
わらはい

440 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 15:59:22.81 ]
(?<![A-VXYZa-vxyz])([WwWw])\1*\b(?![.])

ワロタwwwwww ○
w ○
W杯 ×
how big is ur penis? ×
www.example.com ×

441 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 18:32:34.71 ]
戻り読みが可能なら>>428に手を加えるだけでいけそうだな
(?<![a-vx-zA-VX-Z])([Ww]+)(?![a-vx-zA-VX-Z])|^([Ww]+)(?![a-vx-zA-VX-Z])



442 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 18:58:48.92 ]
>>441
お前さ否定戻り読み全然分かってねーだろ
^([Ww]+)(?![a-vx-zA-VX-Z]) の存在意義が皆無

戻り読みって言いたいだけちゃうかと

443 名前:デフォルトの名無しさん mailto:sage [2011/09/04(日) 11:41:44.97 ]
ここは草いきれのするスレですね

444 名前:デフォルトの名無しさん mailto:sage [2011/09/05(月) 23:42:06.78 ]
よろしくお願いします

●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
ダブルクォーテーションの中の文字を空白扱いにしたい

●対象データ
test="daikon"
test="daikon ninjin"
test="daikon ninjin tamanegi"

●希望する結果
test=""
test=""
test=""

445 名前:デフォルトの名無しさん mailto:sage [2011/09/05(月) 23:44:08.68 ]
".*"
""

446 名前:デフォルトの名無しさん mailto:sage [2011/09/05(月) 23:56:05.76 ]
".+?"
""

447 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 01:02:02.49 ]
"[^"]+"
""

448 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 21:21:28.66 ]
皆さん返答ありがとうございました。
>>447さんの正規表現で正常動作しました。

449 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 20:48:36.46 ]
vbscriptでバックトラッキングを制御する?>のような表現はないのでしょうか?
調べてみたのですが他言語用ばかりで試しに実装して動かしてみましたがエラーになってしまいました

450 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 21:13:57.96 ]
マニュアル見ればいいじゃないの
MSDNにオンラインもあるよ
msdn.microsoft.com/ja-jp/library/cc392020.aspx

451 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 22:05:17.09 ]
よく聞くバックトラッキングってMSDNとか見てもいまいちピンと来ないんですが、
わかり易く解説されてるとことかないでしょうか?



452 名前:449 mailto:sage [2011/09/07(水) 23:28:26.52 ]
>>450
ありがとうございます。

453 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 23:36:53.10 ]
>>451
doc.okkez.net/static/191/doc/spec=2fregexp.html#backtrack

454 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 19:13:57.41 ]
>>452
>>450みて解決できたの?

455 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 22:28:14.59 ]
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
<b></b>で挟まれた文章を抜き出す

●対象データ
<table width="100%" border="1" cellspacing="0" cellpadding="10">
<tr><td><b>ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。</b></td></tr>
</table>

●希望する結果
ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。

====
これを実行するのに、
responseStr = System.Text.RegularExpressions.Regex.Replace(
responseStr,
@"(.|\n)*<b>(?<sentence>.*?)</b>(.|\n)*",
"${sentence}");

とやっているのですが、
「任意の一文字(改行文字も含む)」
という表現は(.|\n)が最適なのでしょうか。
もっとベターなやりかたがあったら教えて下さい。

456 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 22:42:08.09 ]
以前、ww を ワラワラ と読ませるという質問をしたものです。
皆様のおかげで無事にアプリを公開することができました。
ありがとうございます。

Macでニコ生を放送したいかたがおられましたら、
是非ご活用ください。
【ゆっくろいど】www.yukkuroid.com/yukkuroid/

457 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 22:58:04.04 ]
>>455
RegexOptions.Singleline

458 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 23:15:59.05 ]
>>457
ありがとうございます

459 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 00:38:15.69 ]
タグの中身を操作するってのは定期的に上がる質問だね
まぁフクロウ本でも細かく説明されているほど定番なんだろうけど

460 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 08:30:36.52 ]
>>456 公開おめ

461 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 08:44:35.22 ]
>>457
そのサイト、素敵やん?w

あんまスレと関係ない質問だけどトップのバナーって、
なぜ画像分割してるの?結構こういう画像分割してるサイトあるけど、ひとつにまとめたら
ダメなのかなっていつも思ってしまう。



462 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 08:45:18.59 ]
間違えた>>456だった。

463 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 09:02:38.82 ]
線が細い環境で、画像のロード中何も表示されないよりも少しずつでも表示された方がいいからだろ。

464 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 10:06:21.76 ]
インターレースGIFとかあったな…

465 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 12:35:55.66 ]
>>463
なるほど!どうもです。

466 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 14:55:57.83 ]
インターレースPNGとかプログレッシブJPEGとかあったな…

467 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 14:57:35.22 ]
モーションJPEGがどうかしたの?

468 名前:デフォルトの名無しさん [2011/09/10(土) 13:10:40.29 ]
「ecv 0000 ef773s 1111 87ed93」と言った数字、文字、スペースが混ざった文字列から
数字だけのブロック("0000"と"1111")を取り出したい場合のパターンを教えてください。

自分で思いつくのは下記。もっとスマートなやりかたないでしょうか
1.\s→\r\nに置換
2.^(\d+)$→●$1に置換
3.^[^●].*$→空白に置換
4.●→空白に置換

ちなみにサクラエディタです。
よろしくお願いいたします。

469 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 13:19:58.69 ]
\b\d+\b

470 名前:デフォルトの名無しさん [2011/09/10(土) 13:48:11.76 ]
男性器で女性器を表現するのが趣味です

471 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 14:28:04.84 ]
>>468
テンプレに沿って処理前・処理後を示してくれてないからよく分からんけど
\s*\w*[a-z]+\w*\s*|\b\s+\b
\n

改行も揃えたければ
^\n|\n$
空文字

サクラエディタでは試してない、悪しからず
※空白と書くと、通常は空白文字=スペース類のことを指すぞ



472 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 14:54:54.03 ]
>>468
(?:^|\s)\d*\D\S*(?=\s|$)

473 名前:472 mailto:sage [2011/09/10(土) 14:57:02.29 ]
数字のみ以外の文字列を削除すると想定
数字のみなら (?:^|\s)\d+(?=\s|$)

474 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 16:16:05.24 ]
(?<=\b)(\d+)(?=\b)

475 名前:471 mailto:sage [2011/09/10(土) 16:33:45.00 ]
>>468
一発で済むように改良
(?:\s*\w*[a-z]+\w*)*\s*(\d+)\s*(?:\w*[a-z]+\w*\s*)*\n*
$1\n

476 名前:468 mailto:sage [2011/09/10(土) 21:56:12.95 ]
>>471-475
ありがとうございました。

477 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 23:38:59.46 ]
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
検索

●検索対照データ
(abcdefg:;[]あいうえお))

●希望する結果
(で始まり、途中にいろいろあっても、))で終わる対象データを検索したいです。
すみませんが、よろしくお願いします。

478 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 23:43:20.20 ]
\(.*\)\)

エスケープの仕方がわからんだけかな
それともホントは対象データがもっと込み入ってんの?

479 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 23:44:11.21 ]
\(.*?\)\)

480 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 23:48:51.89 ]
かぶったな
\(.*\)\)と\(.*?\)\)の違いは、以下で試せばわかる
(abcdefg:;[]あいうえお))かきくけこ))

481 名前:477 mailto:sage [2011/09/11(日) 02:09:01.68 ]
>>478 >>479
おおお、ありがとうございます、すごいです。
あ、はい、エスケープの仕方がわからんだけかと思います;;
\(.*\)\)と\(.*?\)\)の両方を試してみました。
2つの違いがわかりました。2つ教えてもらってありがとうございました。



482 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 00:05:32.23 ]
どなたかご教授ください・・・
●正規表現の使用環境
EmEditor

●検索か置換か?
置換

●対照データ
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[aa][zy]AC[ab]
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg]

●希望する結果
;AA[ac][ad]・・・・・[zw][zx][zz];AB[aa][zy]AC[ab]     ←;AAの後ろから[aa][zy][ab]を削除
;AA[ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]     ←;AAの後ろから[df][aa][fb]を削除
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg]    ←;AAの後ろから、[bc][fh][ge][eg]を削除

すみませんが、よろしくお願いします。

483 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 01:22:44.15 ]
●希望する結果
;AA    [ac][ad]・・・・・[zw][zx]  [zz];AB[aa][zy]AC[ab]   ←;AAから;ABまでの[aa][zy][ab]を削除
;AA  [ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]   ←;AAから;ABまでの[df][aa][fb]を削除
;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg] ←;AAから;ABまでの[bc][fh][ge][eg]を削除

この結果。。。ムリだ

484 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 01:24:30.46 ]
>>482
正規表現だけじゃ無理
マクロでこんな感じにすればいけるんじゃね?試してないけど

document.selection.SelectAll();
document.selection.Text = document.selection.Text.replace(/^;AA((?:\[[a-z]{2}\])*);AB((?:\[[a-z]{2}\])*)AC((?:\[[a-z]{2}\])*)$/gm, function(a, b, c, d) {
var e = (c + d).replace(/^\[|\]$/g, '').split(']['),
f = b.replace(/^\[|\]$/g, '').split('][').filter(function(g) {
for (var i = 0, l = e.length; i < l; i++) if (e[i] != g) return g;
}).join('][');
return ';AA['+ f + '];AB' + c + 'AC' + d;
});

485 名前:482 mailto:sage [2011/09/14(水) 01:36:56.36 ]
>>483 可能かどうかも全然わかってないので、ご意見ありがとうございました。

>>484 正規表現だけでは無理だけど、マクロでなんとかなりますか、ありがとうございます。

・・・ただ僕はマクロっていうと、マウスのクリックを連打させるツールを使うくらいしかわかってないもので、>>484さんの書かれてるすごい内容をどうやって、どうすれば、どのように使えるのか、ほとんど理解できませんorz

何ヶ月、またはそれ以上たって、もっとマクロに詳しくなって理解できるようになったら、この方法を試させてもらいたいと思いますorz

486 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 09:13:08.91 ]
EmEditorにマクロ機能有るだろ
無料版はマクロ機能ないんだっけか?

487 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 13:16:37.75 ]
EmEditorのマクロってこんなECMAScript的な実装なの?

488 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 14:25:13.45 ]
ECMSScript的というかそのものを拡張してあるだけだったはず

489 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 14:29:29.20 ]
ECMSScriptじゃなくてECMAな(´・ω・`)


490 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 14:32:37.16 ]
さくらエディタでも使える

491 名前:デフォルトの名無しさん mailto:sage [2011/09/14(水) 15:13:53.74 ]
拡張というか、WSHのエンジンをそのまま利用している形だね
だからJScriptとVBScript、どちらでもOk



492 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 17:59:34.52 ]
●正規表現の使用環境
vxeditor

●検索か置換か?
置換

●説明
「a」という文字を正規表現で検索し、「C:\test\test2」に置換するために、

検索語:[a-z] もしくは \w
置換語:C:\test\test2

と置換したのですが結果は「C:        est        est2」となってしまいます。
置換語を「C:\\test\\test2」としてみたら今度は「\test2」となりました。

●対象データ
a

●希望する結果
C:\test\test2

お願いします

493 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 18:19:24.57 ]
またエスケープか

C:\\test\\test2

\tはタブ

494 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 18:20:23.15 ]
>>492
アルファベットのうちの a だけが対象なら [a-z] や \w にする理由が分からん

a

C:\\test\\test2

で十分だろ

495 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 18:26:13.83 ]
よく見たら
C:\\test\\test2
でもうまくいってないのか。

Perl互換の正規表現にしてもうまくいかない?

496 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 18:54:40.15 ]
vxeditor 落として試してみたんだが
置換語 C:\\test\\test2 で普通にいけるじゃねーか
正規表現1、正規表現2どっちも問題なかったぞ

497 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 19:01:51.52 ]
秀丸でHTMLソース内のSmartyタグを強調表示させたいのですが上手くいきません。。
Smartyの開始は {{ で修了は }} としています。
現在は正規表現で {{.+}} を指定しているのですが

<option value="{{$w.cd}}"{{$w.selected}}>ABCDE{{$w.name}}</option>

の場合、Smarty外の 「"」 「>ABCDE 」 も強調表示されています。。
これを何とか強調表示されない指定を教えて下さい神様


498 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 19:24:57.40 ]
>>492
VxEditor使いだが、
【マクロは】帰ってきたVxEditor【DMonkey】
hibari.2ch.net/test/read.cgi/software/1187267009/431
使ってるバージョンが古いのでは?今出てる、Ver 1.0.1を使えば問題ない。

499 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 19:41:32.39 ]
>>497
秀丸は知らんけど、最短一致を使う。
{{.+?}}
または
{{[^}]+}}
かな

500 名前:492 mailto:sage [2011/09/16(金) 20:11:17.76 ]
みなさんご回答ありがとうございます。
>>498氏のおっしゃるように、使用しているverが古かったのが原因でした。申し訳ございません

501 名前:497 mailto:sage [2011/09/16(金) 23:33:54.30 ]
>>499
うおおおおおおおっ!
上はNGでしたが下はバーーーーーーーーーッチリでしたあああ!
あざーすあざーす

「最短一致」勉強します!
教えていた表記も勉強します!

師匠!ありがががとうございましたあ!




502 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 08:14:25.22 ]
アリガがガトー

503 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 12:23:10.26 ]
●正規表現の使用環境
oracle(regexp_replace)
●検索か置換か?
置換
●説明
::でタグ名が記載されたデータを<>タグに変換したい
●対象データ
:dog:I like dog
:cat:I like cat
●希望する結果
<dog>I like dog</dog>
<cat>I like cat</cat>

504 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 12:25:28.34 ]
●試したこと
regexp_replace(data,'^:([^:]*):(.*)$','<\1></\1>\2',1,0,'m');
<dog></dog>I like dog
<cat></cat>I like cat
はできるんですが
regexp_replace(data,'^:([^:]*):(.*)$','<\1>\2</\1>',1,0,'m');
としたら
</dog> like dog
</cat> like cat
となってしまいます。。。。

505 名前:503 mailto:sage [2011/09/17(土) 12:53:20.88 ]
事故解決しました。
CRLF→LFに変換してから処理すれば問題ありませんでした。

506 名前: ◆36l9l1q57CRh mailto:sage [2011/09/17(土) 23:10:50.96 ]
●正規表現の使用環境
Microsoft .NET Framework (使用ソフトウェアは、Repl-Ace on .NETです。)


●検索か置換か?
置換


●説明
対象データを希望する結果に置換したいです。
対象データ(置換の前後)のフォーマットは、●詳細に書きます。


●対象データ
ABCD 12:34:56 阿あアアAaAa1+-○× : 阿あアアAaAa1+-○×
EFGH 00:59:59 阿あアアAaAa1+-○× : 阿あアアAaAa1+-○×


●希望する結果
ABCD\t12:34:56\t阿あアアAaAa1+-○×\t:\t阿あアアAaAa1+-○×
EFGH\t00:59:59\t阿あアアAaAa1+-○×\t:\t阿あアアAaAa1+-○×

※\tはタブという意味で書いてあります。



長いので続きます。

507 名前:506 ◆36l9l1q57CRh mailto:sage [2011/09/17(土) 23:12:34.89 ]
●詳細
■置換前のフォーマット
01.半角 英字 4文字(固定長)
02.半角 スペース(固定長)
03.半角 数字 24時間表示の時刻(固定長)
04.半角 スペース(固定長)
05.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)★
06.半角 空白(固定長)
07.半角 :(固定長)
08.半角 空白(固定長)
09.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)★
10.CR+LF

□置換後のフォーマット
01.半角 英字 4文字(固定長)
02.タブ(固定長)
03.半角 数字 24時間表示の時刻(固定長)
04.タブ(固定長)
05.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)
06.タブ(固定長)
07.半角 :(固定長)
08.タブ(固定長)
09.全角/半角 漢字/ひらがな/カタカナ/空白/記号等(可変長)
10.CR+LF



長いので続きます。

508 名前:506 ◆36l9l1q57CRh mailto:sage [2011/09/17(土) 23:13:05.44 ]
※★マークの所には、03/06-08と同じ文字列が同じ形式で入る可能性がありますが、
 05と09の部分にそれらの文字列があった場合でもそれは残しておきたいです。
例:
・対象データ(1と+の間に07の:、aとAの間に03の日付)
ABCD 12:34:56 阿あアアAaAa1:+-○× : 阿あアアAa12:34:56Aa1+-○×
・希望する結果
ABCD\t12:34:56\t阿あアアAaAa1:+-○×\t:\t阿あアアAa12:34:56Aa1+-○×


以上、どうかよろしくお願いします。

509 名前:506 ◆36l9l1q57CRh mailto:sage [2011/09/17(土) 23:18:17.95 ]
度々すみません。
05と09の位置には、06-08の「 : 」が入る可能性はあるのですが、
実際には入る可能性は低いので、もし無理でしたらこの部分は、
入らない事が前提で構いません。

よろしくお願いします。

510 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 23:26:14.44 ]
ながい。
プログラムで実現しろよ。
正規表現に拘ることはない。

511 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 23:35:03.01 ]
^([a-zA-Z]{4}) (\d\d:\d\d:\d\d) ([^ ]+) (:) ([^ ]+\r\n)$
\1\t\2\t\3\t\4\t\5

たしかに長い



512 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 23:38:50.63 ]
フィールド05と09に空白が入ってるのでやる気を削がれた
そういうとんでもないフォーマットをTSVに直すってことなんだろうけど…

513 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 23:39:25.67 ]
あー空白もまじってんのか

514 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 23:43:19.70 ]
^([a-zA-Z]{4}) (\d\d:\d\d:\d\d) (.+) (:) (.+\r\n)
\1\t\2\t\3\t\4\t\5

こうか

515 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 01:38:41.83 ]
>>514
それだと
" : "
こういった文字列が05に含まれていた場合変になるな
05、09は色々条件書いてるけど等ってなってるから
曖昧なんだよなー・・・

516 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 02:13:05.19 ]
>>515
5に" :"が入った場合は結果が一意に決められなくなるので無視するしかないかと

517 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 04:44:55.16 ]
>>509
06と08が全く同じだけれど、間違いではないのかな?

518 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 04:47:52.57 ]
>>509
それから(固定長)の意味を教えてください。

519 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 13:32:27.04 ]
いくら考えても分からないので、教えてください。

Flexible Renamer8.4というファイル名変更ソフトに「条件付正規表現」というのがあるのですが、どう使うのか分かりません。
ネットで調べるとPearl、PHPなんかで、同じような書式があるようなんですが、挙動がまったく理解できません。
ネット上には

(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

という式があり、aをアルファベット、dをアルファベットとして上式で検索すると
dd-dd-ddとdd-aaa-ddがヒットする、と書いてありますが、dd-aaa-ddはヒットするものの、
dd-dd-ddがヒットしません。

それからよくわかりませんが、

(?(1以上の数字)\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
とするとdd-dd-ddがヒットします。
自分の理解では条件式にある正規表現があれば真の場合の正規表現をマッチさせ、
条件式にある正規表現がなければ偽の場合の正規表現をまっちさせるのだと理解するのですが、
どうも条件式の書き方と制約、そしてその結果と条件式が真、偽のときにどういう挙動をとるのかがよくわかりません。
誰か分かる人教えてください。すみません教えて君でorz もうアタマが痛くなるくらい調べましたが
私には無理でした。

520 名前: ◆/91kCCQXBo mailto:sage [2011/09/18(日) 14:15:57.46 ]
> (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
(?=なんとか)あれ|それ ← なんとかあれ または なんとかそれ にマッチしてあれ・それを取り出す「先読み」。
1111A11-DEC-12
1112A11-12-12
1234B12-JUN-01
C31-MAR-12
D12-03-11
外側の(?....)の方は、わたしじゃわからないわ

521 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 14:44:44.43 ]
>>519
if 〜 then 〜 else 〜 と同じ

> (?(?=[^a-z]+[a-z])\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
「(?=[^a-z]*[a-z])」という条件(英字が0文字以上の繰り返しの後に、英字1文字が
出現する)にマッチしたら、真パターンである「\d{2}-[a-z]{3}-\d{2}」でマッチングが行われる。
そうではないなら、偽パターンである「\d{2}-\d{2}-\d{2}」でマッチングが行われる。
従って「dd-aaa-dd」または「dd-dd-dd」のどちらかの文字列にマッチする。

>(?(1以上の数字)\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
これはちょっと違う
([a-z]{3}-)?(?(1)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
例えばこれだと、「[a-z]{3}-」で始まる場合は、「キャプチャグループ1」に記憶される
そして「キャプチャグループ1」が存在するなら、真パターンである「\d{2}-[a-z]{3}-\d{2}」で
マッチングが行われる。
そうではないなら、偽パターンである「\d{2}-\d{2}-\d{2}」でマッチングが行われる。
従って「aaa-dd-aaa-dd」または「dd-dd-dd」のどちらかの文字列にマッチする。



522 名前:521 mailto:sage [2011/09/18(日) 14:51:24.41 ]
英字が0文字以上の繰り返しの後に、英字1文字が

英字以外の文字が0文字以上の繰り返しの後に、英字1文字が

523 名前:520 mailto:sage [2011/09/18(日) 15:03:48.05 ]
(?(condition)yes-pattern|no-pattern) だそうなので、これやってみて。
> (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
 ↓
  (?([^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

524 名前:521 mailto:sage [2011/09/18(日) 15:10:13.77 ]
>>523
それじゃエラーになる
条件に使えるのは先読みか戻り読みか1以上の数字だけだよ

525 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 15:38:15.08 ]
>>402
irvineとかで十分と思う。

526 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 15:40:35.79 ]
>>467
死にました。

527 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 15:47:18.69 ]
>>521
ありがとうございます。
>if 〜 then 〜 else 〜 と同じ
そうですよね。そう考えているのですが、条件式の書き方が分からないのと、
結果が分からないのです。さきほどから取り上げている

(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

だと、おっしゃられるようにたとえば条件式が真の場合の12-abc-34とか、
偽の場合の12-34-56がヒットするはずですが、実際には偽の場合がヒットしません。
FlexRenamer8.4のバグなんでしょうか?

それから、やはり条件式の書き方がわかりません。上式で条件式を.*とした
(?(.*)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
としたら、とうぜんすべてが真になるはずなので、dd-aaa-ddがヒットするはずですが、ヒットしません。
同様に条件式を
\d*
\d\d
実際の文字列そのものとしてdd-aaa-dd(12-abc-34など)
としてもうんともすんとも言いませんorz なんでなんですかね???

528 名前:520 mailto:sage [2011/09/18(日) 16:09:24.11 ]
(?=^[^A-Z]+)
なら先頭がA-Zの場合、偽になるはず。ソフト入れてないので中途半端ですみません。

(?(?=^[^A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
1234B12-JUN-01
C31-31-12

529 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 16:11:40.70 ]
>>524
おお、そうなんですね。条件式の件はちょっと進歩。しかし偽の場合がマッチしないのは謎。


530 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 16:19:15.86 ]
>>527
たぶんバグなんじゃないかと思う

>やはり条件式の書き方がわかりません。
条件に使えるのは>>524で書いたように(肯定or否定)先読み、(肯定or否定)戻り読み、1以上の数値のいずれか

>(?(.*)\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
「dd-dd-dd」または、直前に「.*」のある「dd-aaa-dd」にマッチさせたいってこと?
それとも「(?=.*)dd-aaa-dd」または「dd-dd-dd」にマッチさせたいってこと?
前者だと (?<=.*) ということになるが、戻り読みは固有長じゃないといけないのでエラーになる
後者だと「.*」は改行以外の0文字以上の繰り返しなので、これでは真パターンのみしか
使われないから、エラーにはならないけど、表現としておかしい

どういう文字列にマッチングさせたいのかいまいち分からない

531 名前:520 mailto:sage [2011/09/18(日) 16:37:15.08 ]
(?=)は先読みなのでパターンの前に書くなら、戻り読み(?<=)使わないと。
それと[^A-Z]*[A-Z]にマッチしないのは[^A-Z]のみの連続。11-12-20など。
以上 <おじゃましました>



532 名前:519 mailto:sage [2011/09/18(日) 17:10:05.69 ]
ここID出ないんですね。失礼しました。
職場で扱っているファイルを一気に変更するためにいろいろ調べていたら
当ソフトに突き当たり、いろいろいじっていて、マニュアルを見たところ、条件付正規表現
というものがあり、いろいろ調べていたところでした。まだ具体的にこれが使えるのかどうかは
分からず調べていたところです。しかし、このソフト、(?(条件式)真の場合|偽の場合)という形で
使えるんでしょうかね??? 非常に高機能ではあると思うんだけど。

>>520
最初に提示した式は他のサイトにあったコピペです。それがなぜかそのまま動作しないので
こちらに質問してみました。そもそもPHPとperlとかで動作は違うんでしょうが。
www.phppro.jp/phpmanual/php/regexp.reference.conditional.html
manual.xwd.jp/reference.pcre.pattern.syntax.html  下のほうの条件付サブパターン
どちらにも同じ式が載っています。

533 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 18:08:31.74 ]
PHP の PCRE は Perl Compatible Regular Expressions の略だから、ちょっと違うとこはあるけど、大体同じだよ

ttp://www.php.net/manual/ja/reference.pcre.pattern.differences.php

ちなみに Flexible Renamer は Boost.Regex ライブラリを使ってるって書いてあるから、
条件付きサブパターンも使えるっぽいんだけどなあ

ttp://www.boost.org/doc/libs/1_34_1/libs/regex/doc/syntax_perl.html

534 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 18:19:53.67 ]
>>527
>(?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})
>だと、おっしゃられるようにたとえば条件式が真の場合の12-abc-34とか、

大文字小文字が合っていないが? 通常大文字小文字は区別される。

535 名前:519 mailto:sage [2011/09/18(日) 20:33:03.70 ]
>>534
正規表現の大文字小文字はどちらでも結果は一緒でした。

どなたかこのソフトできちんと条件付正規表現が動くか試していただけません?
なんか意味がわからないです。

536 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 20:38:42.87 ]
リネーマならRubyやPythonで書いた方が速いかもよ
ここプログラマ板だし

537 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 20:39:37.33 ]
s/プログラマ/プログラム/

538 名前:520 mailto:sage [2011/09/18(日) 20:40:49.13 ]
●正規表現の使用環境 Flexible Renamer
●検索か置換か? 置換
●説明
日付の前の文字を入れ替える
●対象データ
ABC11-12-31 \d{2}-[A-Z]{3}-\d{2}
ABC11-DEC-31 \d{2}-\d{2}-\d{2}
ABC2011-12-31 \d{4}-[A-Z]{3}-\d{2}
ABC2011-DEC-31 \d{4}-\d{2}-\d{2}
●希望する結果
XYZ11-12-31
XYZ11-DEC-31
XYZ2011-12-31
XYZ2011-DEC-31
●コメント:こんな感じか書いて投稿してみた

539 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 20:58:44.06 ]
>>538
条件分岐を使う必然性が感じられないな。対象データはなんか合ってないし。

ABC(?=\d{2}{1,2}-(?:[A-Z]{3}|\d{2})-\d{2}) → XYZ
でいいんじゃね?

540 名前:539 mailto:sage [2011/09/18(日) 21:01:10.78 ]
あ、>>520さんは質問者ではなかったか。勘違い。

541 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 02:59:51.01 ]
●正規表現の使用環境
一般社会

●検索か置換か?
検索

●説明
すぐにやれる女を見つけたいです

●対象データ
OL
女子大生
女子高生
キャバ嬢
ヘルス嬢
近所のおばさん
母親

●希望する結果
させこ
やりまん
公衆便所




542 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 03:12:07.21 ]
>すぐにやれる女を見つけたいです
お前には一生涯マッチしないっ!

543 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 16:07:10.57 ]
>>527
横、亀ですまんが、バグじゃないよ。
普通にマッチする。
マッチするだろうと思っている対象データがおかしいんでないの。

544 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 16:11:56.59 ]
蛇足かもしれんが、>>520で書かれてる
D12-03-11
はマッチしないよ

545 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 16:15:57.42 ]
ごめん。D12-03-11マッチするね。かさねてごめん。

546 名前:デフォルトの名無しさん [2011/09/23(金) 14:38:20.95 ]
●正規表現の使用環境
Microsoft .NET Framework

●検索か置換か?
検索

●説明
下記条件(AND条件)のURLを検索したいです。
・特定のドメイン(yahoo.co.jp)がhttp://直後に含まれない。
・特定の拡張子(jpg,gif)で終わらない。

●対象データ
1.yahoo.co.jp/?=abc
2.yahoo.co.jp/abc.jpg
3.2ch.net/?=abc
4.2ch.net/abc.jpg
・・・など複数URL

●希望する結果
3のみを検索したいです。

よろしくお願いします。

547 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 14:52:28.06 ]
^http://(?!yahoo\.co\.jp)[^/]+/(?!.*\.(?:jpg|gif)$).*$

548 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 14:54:24.49 ]
ちょっと修正
^http://(?!(?:[/]+\.)?yahoo\.co\.jp)[^/]+/.*(?!\.(?:jpg|gif))$

549 名前:デフォルトの名無しさん [2011/09/23(金) 15:26:19.22 ]
>>548
横レスだけど
それだと
2ch.net/abc.jpg
にマッチすると思う

550 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 15:57:55.44 ]
(.(?!\.(jpg|gif)))*$
にしないとだめぽ

551 名前:デフォルトの名無しさん [2011/09/23(金) 18:03:40.59 ]
>>548
>>550
試してみましたがマッチしないです。。。



552 名前:デフォルトの名無しさん [2011/09/23(金) 18:32:13.71 ]
あ、できました!
(?!yahoo\.co\.jp)([-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#](?!\.jpg|\.gif))*

553 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 19:32:38.77 ]
^http://(?!(?:[/]+\.)?yahoo\.co\.jp)[^/]+/(?!.*\.(?:jpg|gif)$).*$

これでおk

554 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 23:32:29.42 ]
(う|ち|ま)んこ

555 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 01:17:45.25 ]
^http://(?!([^/]+\.)?yahoo\.co\.jp/)([^/]+/)+[^.]*(?!.*\.(jpg|gif)$)
やってみた

556 名前:デフォルトの名無しさん [2011/09/24(土) 01:19:43.58 ]
他の拡張子でも検索されてしまう

557 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 01:23:25.36 ]
こういう場合は二回に分けるのがセロリ

558 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 02:08:01.06 ]
逆に考えて、
http://(?:(?:[^/]+\.)?yahoo\.co\.jp/|[^/]+/.+\.(?:jpg|gif)$)
にマッチしないものを検索とかじゃダメなのかな?

559 名前:519 mailto:sage [2011/09/24(土) 16:28:10.96 ]
>>543
お返事ありがとうございます。
そうですか。対象データがおかしい、というのがよく分からないのですが、うちでは

・アプリケーション Flexible Renamer v8.4
 「高度なリネーム」「正規表現」
・検索の正規表現
 (?(?=[^a-z]*[a-z])\d{2}-[a-z]{3}-\d{2}\|\d{2}-\d{2}-\d{2})
 (?(?=[^A-Z]*[A-Z])\d{2}-[A-Z]{3}-\d{2}|\d{2}-\d{2}-\d{2})

・OS Win7 HomePremium 64bit
・対象データ たとえば以下の例
 d12-03-11.pdf、12-03-11.pdf……ともにマッチせず。
 22-asd-12.pdf……マッチする

でNGです。状況を再現したいので、ぜひ実験の詳細を教えてください。

560 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 17:48:55.34 ]
>>559
543ではないが、
>・検索の正規表現
> (?(?=[^a-z]*[a-z])\d{2}-[a-z]{3}-\d{2}\|\d{2}-\d{2}-\d{2})
"|"の前の"\"は不要だよね
それからリネーム方法:−正規表現の右側のボタンを押して、
大文字と小文字を区別するとわかってくるかもしれない

561 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 17:49:20.01 ]
>>559
×12-03-11.pdf
○12-03-11
○d12-03-11



562 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 20:39:30.02 ]
>>560>>561
ありがとうございます! やっと望む結果が出ました! このソフト、拡張子は除外するものと
思い込んでいたことがまずかったみたいです。12-03-11.pdfだと、真の条件でマッチさせる
ことになって、偽の場合になってなかったことが原因のようです。
それに加えて正規表現のスペルミスとかもしてたのかもしれません。スペルミスを防ごうと
WEBからコピペしてたんですが、逆にそれがアダになりました。
たいへん、たいへんお騒がせしました。とても勉強になりました。ありがとうございます。

563 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 00:15:30.57 ]
●正規表現の使用環境
Perl5 or Javascript

●検索か置換か?
検索

●説明
ダブルクオートに囲まれた文字列を取得したい
ただ、「\」の次の文字はエスケープされた文字として扱う

●対象データ
"hogefuga"
"hoge\"fuga"
"hoge\\"fuga"

●希望する結果
hogefuga
hoge"fuga
hoge\


上記のようなありきたりな命題にトライしていたのですが、以下の正規表現のうち1ではうまくいくのに2ではうまくいきませんでした
1. /"((?:(?:\\.)|[^"])*)"/
2. /"((?:[^"]|(?:\\.))*)"/


ただ、僕にはこれが両方同じ意味に見えるのです

なぜこの場合、2ではうまくいかないのでしょうか
気になって眠れません
詳しい方解説お願いします

564 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 00:33:43.88 ]
>>563
\ は [^"] を満たしますから、(?:\\.) は永遠にパスしません。


565 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 00:38:16.13 ]
>>563
| は左側から評価されるからね。

566 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 00:51:44.06 ]
>>563 寝ちゃったかな?
パターン1|パターン2 のとき、パターン1のマッチを調べてダメだったらパターン2のマッチを調べるってことですよ。

ところで、結果はこうですよね。
hogefuga
hoge\"fuga
hoge\\

567 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 01:07:16.19 ]
>>564-566

なるほど!
2では[^"]がエスケープまで食ってしまってたわけですか
/"((?:[^"\\]|(?:\\.))*)"/
なら同じ意味ですね
分かってしまえばなぜこんなことで悩んでいたのか・・・

これでゆっくり眠れます!
ありがとうございました

568 名前:555 mailto:sage [2011/09/25(日) 08:29:07.36 ]
>>553 その前の人のレスからいろいろ勉強になった。(※)
^http://(?!([^/]+\.)?yahoo\.co\.jp).+/(?!.*\.(jpg|gif)).*

bregonig.dll Ver.1.43 with Oniguruma 5.9.1
sakura Ver.1.6.4.0 (※)C#で試したかったが、だれかソースくれないか?
>>557 前後に分けるとこうなる。
^http://(?!([^/]+\.)?yahoo\.co\.jp).*
.*/(?!.*\.(jpg|gif)).*

569 名前:デフォルトの名無しさん [2011/09/25(日) 22:36:07.14 ]
>>568
>^http://(?!([^/]+\.)?yahoo\.co\.jp).+/(?!.*\.(jpg|gif)).*
これでOKそうすな・・・

570 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 14:27:43.37 ]
小文字英字、大文字英字、数字、「@_#」、のどれか3つが入っているかの条件は正規表現で可能でしょうか?
どれか3つのやり方がわかりません。

以下は全く動作せず…
^(?=(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])|(?=.*[A-Z])(?=.*[a-z])(?=.*[@_#])).*$

571 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 15:00:10.40 ]
^(?:[^0-9A-Za-z#@_]*[0-9A-Za-z#@_]){2}[^0-9A-Za-z#@_]*$

言ってることがよく分からないけどこういうこと?



572 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 15:16:26.09 ]
>>571
説明が下手くそですみません。
各パターン4種類の内、必ず3種類以上なのです。

なので頂いたものだと必ず3種類以上にならないので、他のパターンが必要です。

573 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 15:18:40.10 ]
次のように24通りを列記すれば良い。
逆に言えば列記しないとダメじゃないかな。

^(.*
([A-Z].*([a-z].*[0-9@_#]|[0-9].*[a-z@_#]|[@_#].*[a-z0-9])
|[a-z].*([A-Z].*[0-9@_#]|[0-9].*[A-Z@_#]|[@_#].*[A-Z0-9])
|[0-9].*([A-Z].*[a-z@_#]|[a-z].*[A-Z@_#]|[@_#].*[A-Za-z])
|[@_#].*([A-Z].*[a-z0-9]|[a-z].*[A-Z0-9]|[0-9].*[A-Za-z])
).*)$

長いので入れた改行は無視してね。


574 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 15:20:14.73 ]
そんなの正規表現一発でやろうとすんなよ

575 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 16:14:59.93 ]
正規表現エンジンが何かわからんけど、鬼車ならこんな感じ?
^((?-i)(?=.*[A-Z])((?=.*[a-z])(?=.*[0-9])|(?=.*[a-z])(?=.*[@_#])|(?=.*[0-9])(?=.*[@_#]))|(?=.*[a-z])(?=.*[0-9])(?=.*[@_#])).*$
最初の(?-i)は大文字小文字を区別

576 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 19:26:35.96 ]
>>572
24パターンをorで繋げるしかない
どう考えても効率が悪いと思うが

577 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:40:41.11 ]
>>574同意。perlなら、こんな感じか。
$_='hogehoge';
if (/[A-Z]/ + /[a-z]/ + /[0-9]/ + /[\@_#]/ >= 3) { OK }

578 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:01:42.29 ]
Jscriptであるフォルダにあるpdfファイルを「フォルダ名_設計図.pdf」というようにしたいのだけど
先読み肯定で使った正規表現のグループのフォルダ名を置換文字列に使うことってできるんでしょうか?
なんどやってもできないんだけど、、、、、、

579 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:45:16.17 ]
(?=フォルダ名)
ってなってるなら
(?=(フォルダ名))
ってやる

てか、どう書いてダメだったか書いてくれると助かるなぁ。
上記のように書いてもダメだったとか言われると寂しいし。

580 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 09:40:31.62 ]
>>579
スクリプトが手元になくてスペルミスとかしてたらややこしくなるので書きませんでした。できるのか。頑張ってみます。
ありがとうございます!

581 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 09:49:14.19 ]
>>579
書き込みしてから気づいたけど
(?=(フォルダ名)別の文字列)
としてます。これがだめなんでしょうか?



582 名前:デフォルトの名無しさん [2011/10/04(火) 10:20:36.31 ]
お前の目は節穴か? 窓の外を見ろ

583 名前:582 [2011/10/04(火) 10:21:37.16 ]
誤爆スマソ

584 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 20:45:19.89 ]
フォルダ名をわざわざキャプチャする必要あんのかこれ
変数に格納されてるやつをそのまま使えばいいんじゃないの?

585 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 22:12:43.34 ]
>>584
WSHのJscriptでそんなことできるん? できるなら教えてくれ。
結局WScript.argument(0).split("\\").slice(-2,-1)とかなんとかやってごまかそうかなと思っているけど。

586 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 22:28:21.34 ]
具体例をあげてみたらどうだろう。
できるできないのどっちかもわかると思うし

587 名前:デフォルトの名無しさん [2011/10/04(火) 23:05:06.46 ]
正規表現の配列があって各正規表現にIDが振ってあります。
ある入力について、どれかの正規表現がマッチするならそのIDを返す!
というのを効率的にやるテクニックとかないでしょうか。

前方一致ならトライ木を使うのですが
正規表現の場合にどうするのがいいのか分からない。
言語はrubyを使っています。


588 名前:587 mailto:sage [2011/10/04(火) 23:23:07.32 ]
>>587
> p Regexp.new("(pattern1)|(pattern2)|(pattern3)").match("pattern2")
#<MatchData "pattern2" 1:nil 2:"pattern2" 3:nil>

()と|で結合したあと、MatchDataを1からlengthまでみてnil以外がヒットした正規表現の添え字+1か。
きっとエンジンが効率よくやってくれそうだし、解決しました。


589 名前:587 mailto:sage [2011/10/04(火) 23:39:38.93 ]
patternの中に()があると$nがずれるのでだめでした。

590 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 23:48:56.34 ]
もしその()をあとで使う予定がないのなら(?:)にして捨ててしまえばいいと思う

591 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 04:28:39.04 ]
>>587
そういう時こそ名前付きキャプチャ

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
re_table = { :one => /(?<one>a+)/, :two => /(?<two>b+)/, :three => /(?<three>c+)/ }
re = /\A(?:#{Regexp.union(*re_table.values)})/

%w(abc bca cab).each do |s|
  match = re.match s
  p match
  re_table.keys.each do |name|
    p match[name]
  end
end

outputs:
#<MatchData "a" one:"a" two:nil three:nil>
"a"
nil
nil
#<MatchData "b" one:nil two:"b" three:nil>
nil
"b"
nil
#<MatchData "c" one:nil two:nil three:"c">
nil
nil
"c"




592 名前:デフォルトの名無しさん [2011/10/05(水) 16:34:14.94 ]
性器表現

593 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 09:09:28.47 ]
ボウヤ、それ面白いと思ってるの?

594 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 17:03:52.30 ]
正規表現は、既出かどうかってのがわかりにくいね。

●正規表現の使用環境
Java1.6

●検索か置換か?
検索

●説明
変数文字列とその添字の取得

●対象データ
$AAA.BBB+$CCC.DDD.EEE(1234)-#FFF*#GGG.HHH(567)

●希望する結果
検索1回目
group1 : $AAA.BBB

検索2回目
group1 : $CCC.DDD.EEE
group2 : 1234

検索3回目
group1 : #FFF

検索4回目
group1 : #GGG.HHH
group2 : 567


($.*)\\(([0-9]*)\\)
これで、$CCC.DDD.EEE(1234)をみつけれるのは出来たけど、添え字が無い場合を引っ掛けるのができない。

595 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 17:13:24.51 ]
添え字を検索してる部分のケツに「?」つけてみたら?

596 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 17:23:36.99 ]
>>595
御幣があったかも。

($.*)\\(([0-9]*)\\) これで
$CCC.DDD.EEE(1234) この文字列から

group1 : $CCC.DDD.EEE
group2 : 1234

といのが取れるところまで出来てて

$AAA.BBB+$CCC.DDD.EEE(1234) この文字列から

1回目
group1 : $AAA.BBB

2回目
group1 : $CCC.DDD.EEE
group2 : 1234

という結果を取得する方法がわからない。

597 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 18:04:55.62 ]
(\$[A-Z]{3}(?:.[A-Z]{3})+)(?:\(([0-9]+)\))?

598 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 20:42:05.60 ]
>>597
ありがとう。でも、上手くいかなかったよ。

後、伝え方が悪かったので以下のフォーマットなのでピリオドがかならず入るというわけではないのと
3文字という縛りも無い。

$[変数名](添字)
$[変数名]

599 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:11:12.85 ]
([$#][\w.]+)(?:\((\d+)\))?

600 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:23:51.36 ]
>>599

601 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:29:59.52 ]
なんでこのスレに質問に来る奴って、
正規表現の前に、日本語での意志疎通能力を身につけろ
って感じの奴が多いの?



602 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:31:34.19 ]
>>599
ありがとう、いけた!

603 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:38:24.99 ]
>>601
答えてるやつも同じような感じだからいいんじゃね?

604 名前:599 mailto:sage [2011/10/10(月) 22:16:37.55 ]
>>601
まったく同じくことを感じていたよ
質問者の文章に戸惑いを覚えつつ、テキトーに回答してみた
2ch内だとこのスレはまだマシな方でしょ
御幣もち食いたくなった

605 名前:デフォルトの名無しさん [2011/10/11(火) 09:58:42.99 ]
●正規表現の使用環境
C#

●検索か置換か?
検索(完全一致)

●説明
・擬似ワイルドカードもどきを作成したい。
・ワイルドカードには"?"のみを10回連続で使用可能、"*"は不可。
・対象データは"'(シングルクウォート)"ではじまり"'(シングルクウォート)"で終わる。
・'(シングルクウォート)内であれば、"?"は複数箇所で使用可能。
・ワイルドカード以外の文字(列)は仮で"○"として考える。

●対象データ
ex.)
'○○???'
'???○○○'
'???○○○???'
'○○???○○○'
'○○???????????○○○'

●希望する結果
'○○???' ←match
'???○○○' ←match
'???○○○???' ←match
'○○???○○○' ←match
'○○???????????○○○' ←unmatch(?が11回連続)

606 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 11:02:56.24 ]
[^?]\?{1,10}[^?]


607 名前:605 [2011/10/11(火) 11:44:00.71 ]
>>606
それだと
>'???○○○???' ←match
にマッチしないと思うのですが。
また、対象データはあくまで例であり、
'???○○○???○○○???○○○???○○○???○○○???○○○???・・・'
というように繰り返す可能性もあり、開始と終わりは"'(シングルクウォート)"です。


608 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 11:52:29.58 ]
11回連続の物にマッチする物を探して
マッチした物をアウトとする方が楽じゃないの?と思ってしまうのだが

609 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 12:18:36.31 ]
>>605
'[^?]*?{1,10}(?:[^?]+?{1,10})*[^?]*'

610 名前:605 [2011/10/11(火) 13:20:11.12 ]
>>609
regex-recipe.frozenlib.net/
ここで使える形で再度教えていただいてもよろしいでしょうか?
(?:)
この使い方がよくわからないもので。。。

611 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 14:51:39.91 ]
>>610
>>609じゃないけど
'[^?]*\?{1,10}(?:[^?]+\?{1,10})*[^?]*'



612 名前:605 [2011/10/11(火) 15:20:38.75 ]
>>609
>>611
(?:)がどうとかではなく、単に?のエスケープが必要だったんですね
ありがとうございました。

追加の要望で申し訳ないのですが、>>605>>607の条件に加えて
・'???'等ワイルドカードのみ、'○○○'等ワイルドカード文字("?")なしはNomatchとする
とした場合はどうなりますか?

613 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 15:50:26.95 ]
擬似ワイルドカード表現が正当なものかチェックしたいのかな。
追加の要望は別の用途なのか、改良なのか。
>>611だと今でも'ABC'にマッチしないけどいいの?

というかさ、正規表現一発で終わらせようとすると、正規表現自体が思惑通りの結果を
出してるかどうかのチェックに悩まされたり、思わぬバグ混入になるやもしれないよ。
''(空文字)とか'A'B'とかやその他の文字列に完全マッチ/部分マッチしないかとか、
?終わり/始まり、1文字のみはどうかとかね。
実際、あなたも回答者もチェックしきれてないでしょ。
一発で終わらせようとせず、チェック項目ごとに何段階かに分けて処理した方がいい。
>>608の提案もグッドだと思う。

(?:)は記憶(キャプチャ)しないグループ。
繰り返しの\1とか、置換の$1とかに入らない。
繰り返しや置換を使わない場合、ただの飾りです。

614 名前:609 mailto:sage [2011/10/11(火) 17:35:31.78 ]
>>611
フォローthx

>>612
'(?!\?*')[^?]*\?{1,10}(?:[^?]+\?{1,10})*[^?]*'

615 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:43:37.54 ]
>>613
あとで使わないことを明示することでメモリ節約および速度向上が見込めるよ。
微々たるものの場合が多いけど、クセ付けるとよいかと。

616 名前:デフォルトの名無しさん [2011/10/12(水) 18:28:29.06 ]
性器表現

617 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 18:49:04.20 ]
>>616
>>593

618 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 21:18:09.59 ]
定期的に湧くな

619 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 21:25:55.80 ]
bbspinkに姉妹スレでも作るか

620 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 20:45:16.60 ]
●正規表現の使用環境
Windowsコマンドプロンプト、filestr

●検索か置換か?
検索

●説明
全角英の大文字または小文字または全角数字が含まれているか検索したい

●対象データ
以下batで失礼します
set a="Ape"
set b="Bape"
set c="222"
●希望する結果
%a%、%b%、%c%から検索して、"Ape"、"Bape"、"222"、という結果を表示できるようする正規表現または、それを含めたコマンド
●試したコマンド
echo %a%|findstr /r "[A-Z]"
echo %b%|findstr /r "a-z"
echo %c%|findstr /r \[0-9\]
echo %c%|findstr /r "\[0-9\]"
echo %a%|findstr "[A-Z]"
echo %b%|findstr "a-z"
echo %c%|findstr a-z
findstr /r [A-Z] %a%
findstr /r [a-z] %b%
findstr /r [0-9] %c%
上記のコマンドは間違っていて結果が全て空欄になっています。正しい場合は
set d=" あああ"
echo %d%|findstr /r /c:"^. ."
こちらの画面を見て頂ければと思います。それではどうかよろしくお願いします。

621 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 21:23:20.21 ]
>>620
set a="111"
set b="Ape"
echo %a%|findstr "[0123456789]"
echo %b%|findstr "[ABCEDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]"



622 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 22:02:28.61 ]
>>621
成功する事ができました。ありがとうございます。
"-"は始点と終点の全てを含むみたいな意味では無かったのですね。
なるほど・・・勉強になりました。

623 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 23:14:43.76 ]
>>622
始点から終点のすべてを含むであってるよ。

ただ、文字クラスがマルチバイトに対応していないんじゃないかな。
echo "a" | findstr "[B]"
このとき、 a(0x61) は [B] ([0x8161]) にマッチしてしまう。

624 名前:デフォルトの名無しさん [2011/10/14(金) 18:20:41.89 ]
●正規表現の使用環境
sakura editor

●検索か置換か?
検索

●説明
.jpgや.png、.zipなど特定の拡張子以外のurlを検索したい

●対象データ
www.hogehoge.com/aaaa.html
www.hogehoge.com/bbbb.jpg
www.hogehoge.com/cccc.png
www.hogehoge.com/dddd

●希望する結果
www.hogehoge.com/aaaa.html
× www.hogehoge.com/bbbb.jpg
× www.hogehoge.com/cccc.png
hogehoge.com/dddd

https?:\/\/[!-~]+ でurl全体は検索できたのですが
お尻が〜以外という条件を加えたく↑に[^(jpg|png)]とか付けてみたけど駄目でした

625 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 18:46:01.58 ]
>>612はどこへ行った?

626 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 19:27:35.32 ]
>>624
http://(.(?!\.(jpg|png)))*$

627 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 19:43:19.86 ]
>>626
ありがとうございます
本当は
「今日は晴れ www.hogehoge.com/aaaa.html 明日は雨」
↑の様な文中のurlのような物も検索したかったのですが、
情報小出しになってしまうので、教えてもらったヒントでググってきます
感謝!

628 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 21:17:23.01 ]
過去ログなんて1ヶ月も経てば忘却の彼方か... (>>546-)

つか、それって「".jpg"も".png"も含まないURL」の検索だよな。
拡張子限定にはなってない。

まぁ実際の運用上問題になることはほとんどないだろうけど。

629 名前:624 mailto:sage [2011/10/14(金) 22:03:23.94 ]
>>628
返す言葉もありません、申し訳ない
(?!)をうまく使えば行けるか?ということまでは分かったので
後は自力で頑張ってみます、すみませんでした

630 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 23:43:50.23 ]
>>624
http://(?>[^\s]+)(?<!\.jpg|\.png)

631 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 10:15:50.41 ]
>>623
亀レスで失礼します。
どうもありがとうございました。確かに半角であれば"[A-Z]"など使えるみたいでした。
/rと書いてましたがデフォで正規表現の状態だったのですね。

あれから安心しきっていたのですが、全角が使えなかったのは
文字クラス[]がマルチバイト文字に対応していないとのことで
ちょっと真剣に精査してみます。ちょうどマルチバイト文字が疑問でした。
(調べていた時にa(0x61) は [B] ([0x8161])といった表現を良く見た気がしたので )

原因追究までどうもありがとうございました。大きく前進できました。



632 名前:デフォルトの名無しさん [2011/10/17(月) 20:31:29.89 ]
正規表現を使って2ちゃんねるメニューのカテゴリ周りの太字や改行のHTMLタグを外したいです。

※1----------------------------------
<BR><BR><B>地震</B><BR><A HREF=headline.2c.2ch.net/eq/>臨時地震</A><br> ... 緊急自然災害</A><BR><BR><B>おすすめ</B><BR><A HREF=http:// ....

地震<A HREF=headline.2c.2ch.net/eq/>臨時地震</A><br> ... 緊急自然災害</A>おすすめ<A HREF=http:// ....
--------------------------------------

そのため以下のように正規表現のコードを作りました。
str.replace(/<BR><BR><B>(.+)<\/B><BR>/, '$1');

実行したところ、

※2----------------------------------
地震</B><BR><A HREF=headline.2ch.net/bbynamazu/>地震headline</A><br><A HREF=toki.2ch.net/namazuplus/> ...
--------------------------------------

のようになり、メニューデータ中の先頭の"<BR><BR><B>"と末尾の"</B><BR>"を見てしまっているらしく、うまく動作しませんでした。
データを分割してその都度処理をかけようかとも思いましたが、いまいち効率が悪そうです。
どのように書けば※1のように動作させられるのでしょうか?

実装言語はJavaScriptです。

633 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 21:09:51.15 ]
>>632
最短一致

634 名前:デフォルトの名無しさん [2011/10/17(月) 21:29:30.86 ]
>>633
ググッて解決しました。
ttp://hodade.adam.ne.jp/seiki/page.php?study4

ヒントありがとうございました。


635 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 13:47:19.74 ]
JavaのStringについてですが
str.matches("^[a-zA-Z0-9\\(\\)]+$");
というように()を判定したいのですがエラーになってしまいます。
()はどのように指定すればよいでしょうか?

636 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 14:15:49.25 ]
>>635
str.match(/^[a-zA-Z0-9()]+$/)

637 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 16:09:06.31 ]
●正規表現の使用環境
NoEditor
●検索か置換か?
検索
●説明
テキストに書いたURLから特定の場所の文字列を抽出したい。

●対象データ
"http://半角英数列X/a/半角数列A/半角英数列B/"

●希望する結果
半角数列A

どうかよろしくお願いします。

638 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 17:41:02.84 ]
>>636
それってJavaScriptじゃないでしょうか?

639 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 18:41:44.95 ]
>>635
[]で指定する時はエスケープいらなかったはずだけど


640 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 21:45:53.08 ]
>>638
str.matches("^[a-zA-Z0-9()]+$");

641 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 21:48:14.77 ]
>>640
それダメなんですよねー



642 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 23:00:00.57 ]
>>641
エラーが出るってのは例外でてるってことでいいの

643 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 23:34:37.20 ]
そうっす

644 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 05:09:14.81 ]
これはひどい質問者だな

645 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 05:56:46.55 ]
JavaのStringのmatchesは完全一致らしいけど
とりあえずこれはtrueになるね

"int fooABC123(void)".matches("[a-zA-Z0-9() ]+");
"\\".matches("\\\\");

646 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 09:45:17.32 ]
>>634
なかなか初心者向きのページで、これからって人にいいね。
ちょっと勉強してくる

647 名前:デフォルトの名無しさん [2011/10/27(木) 00:36:45.31 ]
<hoge>aaa</hoge>
bbb
<hoge>ccc</hoge>

<hoge></hoge>に囲まれてる文字を大文字に置き換える処理をしてるのですが、
<hoge>(.*)</hoge>で一応できます。
<hoge>(.*)?</hoge>と?をつけてもできるのですが、
どっちが正しいのでしょうか?

648 名前:647 mailto:sage [2011/10/27(木) 00:45:02.81 ]
ちなみに言語はPHPでpreg_replaceで最初にマッチした1つではなく、マッチしたものの全置き換えをしています。

649 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 00:54:46.79 ]
ちゃんとやるなら
([^<]+)こうすべきだろ

650 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 02:19:10.46 ]
[[$〜$]]
〜の部分を取りたいのですが
[[$test$]]$]]のように
〜の部分にも$]]を含む場合
test$]]を取りたいのですが
こういう場合はどういう記述をしたらいいのでしょうか?

651 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 02:29:26.54 ]
>>650
[[$test$]]$]]$]] のときは?
[[$test$]]$]]$]]$]]$]]$]]$]]$]]$]]$]] のときは?



652 名前:650 mailto:sage [2011/10/27(木) 03:02:31.73 ]
>>651
>[[$test$]]$]]$]] のときは?
test$]]$]]
>[[$test$]]$]]$]]$]]$]]$]]$]]$]]$]]$]] のときは?
test$]]$]]$]]$]]$]]$]]$]]$]]$]
です。

[[$〜$]]は文章中に1箇所だけではなくいくつかあります。

653 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 04:05:11.32 ]
最長一致でいいなら普通に取ればよくね?

654 名前:850 mailto:sage [2011/10/27(木) 04:42:40.78 ]
>>853
最長一致がどういうことかはよくわかりませんが、
言葉の意味通りに捉えると
[[$test$]]$]]あいうえお[[$test2$]]の時
『test$]]』と、『test2』の2つに一致してほしいわけですが
『test$]]$]]あいうえお[[$test2』に一致してしまわないでしょうか?
もし違ってたらすみません。

655 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 05:20:27.99 ]
じゃあ[以外が続いて$]]でよくね

656 名前:650 mailto:sage [2011/10/27(木) 07:41:09.65 ]
ありがとうございます。
教えていただいた方法で大丈夫そうです。

657 名前:647 mailto:sage [2011/10/27(木) 09:23:05.93 ]
>>649
レス遅くなってすみません。
(.*)に<が入ってることも考慮したいのですが、
その場合はどうしたらいいでしょうか?
<hoge>hoge</hoge></hoge>
みたいな感じのとかです。

658 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 11:19:51.80 ]
すいません、ものすごく初歩的なのですが
URL変換の正規表現についてお伺いしたいです。

<rule>
<from>category/(.*)\.html</from>
<to type="forward">/servlet?action=category&type=$1</to>
</rule>
は正常に動作するんですが、パラメータが複数の場合が解りません。
<rule>
<from>category/【(.*)\】/(.*)\.html</from>
<to type="forward">/servlet?action=category&type=$1&type1=【$2】</to>
</rule>
【】内はどのように指定すればよろしいですか?

659 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 14:16:37.29 ]
>>657
<hoge>([^<]+?)</hoge>

660 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 17:41:46.66 ]
>>659
たぶん
hoge</hoge>
が取りたいって言ってる

661 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 02:07:58.52 ]
>>657
<hoge>((.(?!<hoge>))*)</hoge>
>>658
category/([^/]+)/(.+)\.html



662 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 14:47:11.91 ]
<hoge><hoge>aaa</hoge></hoge>

aaa</hoge> をとりたいのか
わけわからんな

663 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 18:26:35.79 ]
それを大文字にすると
AAA</HOGE>

>(.*)に<が入ってることも考慮したいのですが、
考慮とは何を意味するのか分からないし、
そもそも質問者は正規表現が知りたいとは一度も言ってないな

664 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:07:50.98 ]
abchjBFG以外の連続する文字というのはどう書けばいいでしょうか?
[^d-gik-zAC-EH-Z]+ではだめなようでした

665 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:19:09.19 ]
[d-gik-zAC-EH-Z]+でいける
ちなみに[^abc]はabc以外の任意の一文字って意味

666 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:27:46.91 ]
どうでもいいけど、それならむしろ[^abchjBFG]+の方が
否定すべき文字が一目瞭然でいいと思う。表現も簡潔だし。

667 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:36:23.11 ]
[^abchjBFG]+は\b\0\0\bにもマッチするよ

668 名前:664 mailto:sage [2011/10/29(土) 18:07:31.64 ]
>>665-667
みなさんありがとうございます
参考になりました

669 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 17:10:22.22 ]
文字クラスの積を使っても良ければ、直接書けるけどね。
[A-Za-z&&[^a-chjBFG]]+

670 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 09:17:55.02 ]
UTF8からSJISに変換する前に
Category propertiesなどで、日本語の範囲内かチェックしておきたいのだけど
何処かに良い見本は無い?

671 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 12:10:35.18 ]
>>670
文字コード ライブラリでググれ



672 名前:デフォルトの名無しさん [2011/11/02(水) 16:58:54.60 ]
URIの正規表現で質問させてください

PHPにて英数字、エンコードした時の文字とか有り得る文字以外はValidateチェックにて弾きたいと思うのですが、どのような正規表現が書けるものなのでしょうか?
[?&/%_-]*とかホワイトリスト的に書き加えようと思ったのですが、それ以外の有り得る文字列が分かりませんでした

・URI指示にてまず有り得ない文字が入っていたら排除したい
・NULLバイトなどセキュリティ的に問題があるものを排除したい

そもそもNULLバイトの場合は正規表現で省くのではなく、preg_match('/\0/', $uri)などで弾くのかもしれませんが

673 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 17:05:20.24 ]
PHPならなんか素敵な便利関数がありそうな気がするけど

674 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 17:17:37.83 ]
>>673
最初、|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|iとしたのですがダメで、
Zend_Uriというライブラリがあるのですが、それ使っても普通にパスを通ってしまいました

で、自分で正規表現を使って・・・と思ったのですが、実力不足で・・・


675 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 18:24:02.87 ]
RFC的に厳密に、ってことなら適当なところで妥協した方がいいと思うけどね。
現実的な方法論ではない。
www.din.or.jp/~ohzaki/perl.htm#httpURL

676 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 18:42:38.64 ]
ていうか今んとこ要求としては、とにかく、絶対にありえない文字がどっかに入ってるものを
排除したい、ということであって、バリデーションじゃないわけだよね。

だったら preg_match('/\0/', $uri) とかの羅列で弾いとけば?

677 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 01:28:11.97 ]
やっぱ量指定子っておもくなるんだね。100万文字くらいある奴でかなり違った

678 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 02:17:36.94 ]
環境によって重かったり軽かったりいろいろ。

A{100}
AA{99}
A{99}A
(?:AAAAAAAAAA){10}
AAA・・・AAA (100個)

いろいろな書き方が出来るからその環境に合わせて最速の方法で書く。

679 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 07:25:59.87 ]
sourceforge.jp/projects/regexpress/
の正規表現練習ツールってどうなの?

680 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 10:06:22.47 ]
>>678
おお。すごいね。こんなにいろいろ書き方あるもんなのか。

681 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 11:13:49.35 ]
0パディングされてない1〜3桁の数字のみにヒットさせる正規表現ってどのように書けますか?

ヒットする例
0
9
10
19
99
100
999

ヒットさせない例
00
000
09
010
019
099
0100
999




682 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 11:48:14.93 ]
難しいな、999はヒットするけどヒットさせないのか。

683 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 12:08:24.08 ]
すいませんヒットさせない例の999の部分は消してください

684 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 12:09:57.81 ]
言語は問いませんが
例えば
[0-9]|[1-9][0-9]|[1-9][0-9][0-9]
とかけますけど
もっとかっこよく書きたいんです

685 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 12:26:01.30 ]
[1-9]([0-9]){0,2}
しか思いつかないヘタレです

686 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 12:30:41.96 ]
それだと0にヒットしない

687 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 12:58:28.78 ]
[^0-9][0-9]([1-9]){0,2}[^0-9]

688 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:01:11.90 ]
^[1-9]?[0-9]?[0-9]$

689 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:02:39.36 ]
>>687
それは先頭が数字以外のものに引っかかる

>>688
それは01とか03に引っかかる

690 名前:688 mailto:sage [2011/11/04(金) 13:03:11.06 ]
駄目だった。。

691 名前:688 mailto:sage [2011/11/04(金) 13:08:34.85 ]
^([1-9][0-9]?)?[0-9]$
これならいけるか。



692 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:14:08.90 ]
(?:[^0-9])([0-9](?:[1-9]){0,2})(?:[^0-9])
(?<=[^0-9])[0-9][1-9]{0,2}(?=[^0-9])

693 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:15:12.17 ]
ああ、普通に01にひっかかるな

694 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:18:39.65 ]
(?<=が使えなきゃ無理じゃない?なんの言語でやるのかは知らないけど。

695 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:20:15.03 ]
とはいえ、>>691だと
hoge123fuga
に引っかからない


696 名前:688 mailto:sage [2011/11/04(金) 13:27:54.83 ]
あら、それもひっとしないといけなかったのか。。

697 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:37:01.78 ]
(^(0|[1-9][0-9]*)$) じゃだめなん?

698 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 13:44:03.82 ]
>>697
1000000
にマッチする

699 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:07:27.44 ]
もう既に>>685>>686で答え出てるようなもんだろ

^(0|[1-9][0-9]{0,2})$

700 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:10:26.08 ]
結局どうなったの?

(?:0|[1-9]\d{0,2})

701 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:17:52.54 ]
なんでみんな
> 数字のみにヒット

> 数字のみの行にヒット
って読みかえるの?



702 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:23:59.29 ]
00が0と0の並びだったらとか考えたらキリがないからじゃないか

703 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:33:35.02 ]
00はヒットしないって書いてるのに

704 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 16:53:35.95 ]
結論的には>>681の書いてる事が曖昧なので答えは出ない

705 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 17:22:50.69 ]
それは低学歴だから理解できてないだけ


706 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 17:38:33.51 ]
>>705
高学歴の方。もう一度中学校で国語の勉強をし直しなさい。

707 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 17:41:38.08 ]
0パディングされてない1〜3桁の数字のみ
って書いてあるのに0とか数字以外にヒットさせたりとかバカが多いな

708 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 17:59:06.50 ]
既に答えは出てる。
>>684で解決できるそうだから対象は数字のみの文字列なんだろう。

709 名前:ぺんた ◆oNQIb2UJK. mailto:sage [2011/11/04(金) 18:00:44.78 ]
perl準拠の拡張正規表現でいいんなら・・
(?<!\d)(?:0(?!\d)|[1-9]\d*)

710 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 18:05:56.34 ]
>>681,684
^(?:\d|[1-9]\d{1,2})$
(?<!\d)(?:\d|[1-9]\d{1,2})

>>709
4桁の数字にHITする問題がある

711 名前:710 mailto:sage [2011/11/04(金) 18:06:58.76 ]
失礼、>>710を訂正する。
^(?:\d|[1-9]\d{1,2})$
(?<!\d)(?:\d|[1-9]\d{1,2})(?!\d)



712 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 18:12:23.00 ]
>>710
ああ、3桁しばりがあったんですか、見落としてました・・。正解は>>711で合ってると思います。

713 名前:ぺんた ◆oNQIb2UJK. mailto:sage [2011/11/05(土) 00:13:57.66 ]
あれ、よく見ると合ってないですね。perl準拠の拡張正規表現での正解は↓だと思います。
(?<!\d)(?:0|[1-9](?>\d{0,2}))(?!\d)

(?> ) は使わなくても誤作動はしませんが付けるのが正しい書き方だと思うので付けてあります。

714 名前:ぺんた ◆oNQIb2UJK. mailto:sage [2011/11/05(土) 00:26:03.19 ]
あれ、>>711も合ってますね。勘違いしました。失礼しました。
一桁と二桁以上の数字を別処理としてマッチさせてるんですね、その発想は無かった。

715 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 14:17:18.31 ]
これだけ回答が出ていて>>681,684は放置するのか…


716 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 14:28:05.76 ]
正直言ってどの回答も >>684 よりかっこわるいからな…
実装する立場からは >>684 が FA でいいよ、もう。

717 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 14:53:41.92 ]
>>584は "1000" にマッチする上、[0-9] がださいし、不完全な部分一致になってるし、どこがかっこいいと思ってるのかさっぱりわからない件


718 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 14:59:26.23 ]
Finite AutomatonなのかFinal Answerなのか

719 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 15:01:43.44 ]
Falsy Answer

720 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 15:19:38.96 ]
>>681 = >>684 てことでいい?
>>681 の回答例が >>684ということで、これは
「与えられた文字列全体がパターンに一致するか真偽を判定する」
問題なのであって、
「走査して位置を求める」
問題ではないということで異議はない?

Javaでいうとこのmatchesとfindの違いか。
テンプレのジャンルには検索と置換しかないんだけど、「判定」も足そうぜー

721 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 18:14:41.37 ]
正規表現は見た目どうこうではなく期待通りの動作をするか否かが大事。正しい動作をさせるために
見た目が長く汚い物になることも多々あります。>>711のものは非常によく出来てると思いますよ。



722 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 18:57:08.76 ]
>>720
たとえばって書いてることを考慮できないってのはひどいもんだな

723 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 19:35:34.87 ]
せっかくいいものを作ってもらってるのに使わないなんてもったいないなぁ。なんのために質問したのかと。

724 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 21:09:43.80 ]
最初からおちょくるつもりだったんだろ

725 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 23:07:54.79 ]
>>684 と等価でよりかっこいい答えが求められているだけの話だろー
オレオレ要件でよってたかってエスパー回答するのも楽しい話ではあるが。

726 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 23:20:40.68 ]
漫画の見すぎってやつか。俺はもっとかっこいい剣が欲しいんだ!みたいな。

727 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 00:55:33.98 ]
わかりにくい質問かもしれませんがよろしくお願いします。

●正規表現の使用環境
Java(Android)

●検索か置換か?
検索

●説明
文字列から、数値を含むURLを検索し、その数値を取得したい

●対象データ
some_website.net/category:63
some_website.net/category:19
・・・
のように、数値を含むURLを含んだ文字列

●希望する結果
some_website.net/category:63
だったら、63を取得

728 名前:727 mailto:sage [2011/11/06(日) 00:57:51.72 ]
String regex = "some_website.net/category:([0-9]+)\">";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher m = p.matcher(html);
if(m.find()) {
// 上のregexの([0-9]+)の部分を取得したい
}

よろしくお願いします。

729 名前:727 mailto:sage [2011/11/06(日) 01:30:21.23 ]
Matcherのgroupメソッドで解決しました。
お騒がせしました。

730 名前:デフォルトの名無しさん [2011/11/07(月) 21:14:56.26 ]
>>279に似たような質問があるのですが、
PHP5.3.8にてDOMDocumentにてHTMLファイルを取得し、<body>内のテキストだけを抽出したいです。
タグ部は正規表現で除去出来ますが、問題になるのは<script>でJavaScriptの中身が表示される、<!--などのコメントが表示される事です。
で、<script>とコメントを含む部分を先に除去したいと思います。

/<script[^>]*?>.*?</script>/si
とかやってみたのですが良く分かりません。

アドバイスまたは似たような事を書かれているサイトなどを教えて頂けないでしょうか?


731 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 21:39:07.16 ]
>>730
PHPスレいっておいで
正規表現使わずにできるから



732 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 21:48:28.52 ]
>>731
マジですか?
では行ってきます

733 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 21:50:21.62 ]
>>731
マジですか?
では行ってきます

734 名前:670 mailto:sage [2011/11/08(火) 10:18:31.06 ]
m/(?:(?:\p{Hiragana}|\p{Katakana}|\p{Han}|\p{Latin}|\p{Common})
(?:\p{Inherited}|\p{Me}|\p{Mn})?)+/x;

735 名前:デフォルトの名無しさん [2011/11/08(火) 22:56:34.23 ]
性器表現

736 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 01:50:21.80 ]
       ∧∧
       (д`* )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)

737 名前:デフォルトの名無しさん [2011/11/10(木) 14:52:38.32 ]
皆さんは区切り文字のデリミタにはどの文字を使っていますでしょうか?
"/"だとURIなどでエスケープしなくちゃいけなくなり、見にくくなりますが
"!"とか"@"とか使う可能性が少ないものがいいと思うのですが、どんな文字がいいのでしょうか
皆さんの使っている文字を教えて頂けないでしょうか?


738 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 14:57:57.97 ]
>>737
その時の状況(エスケープの手間や可読性等々)で使い分けてるから、
「この文字がいい」という提案は不可能。

739 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 15:13:18.11 ]
ナル

740 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 21:07:08.63 ]
>>738
でも使う文字ってそんなに種類ないでしょ?

741 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 21:41:16.77 ]
>>740
まあ「記号類のどれか」であることは確かだわな。



742 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 23:07:36.02 ]
一文字に限るから困るんだ、という回避方法をとってるものも割とあるよ。2chとか。

743 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 23:13:25.72 ]
!も@も使われるしな。安全なデリミタなんて無いわな。

744 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 01:42:09.31 ]
ASCIIコードでは0x1Cから0x1Fまでを
 ファイル、グループ、レコード、ユニット
の順で「セパレータ」と定義しているぞ。

745 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 05:47:32.27 ]
>>744
で?

746 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 06:23:00.52 ]
なぜそれらを使うに値しないかの理由を言わずに否定するのはおかしいから、それらを使うのが当然ってことかぁ

747 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 07:19:41.84 ]
>>744
そのセパレータは意味が全然違う。

748 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 08:09:54.63 ]
矛盾する?単語羅列がいいよ
記号でやるのは古い

例えば「男爵伯爵」とか

749 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 08:14:24.50 ]
>>748
Googleでは引っ掛からなかった。 「男爵伯爵」

750 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 08:17:57.30 ]
>>749
引っ掛からないのは使えるって事だしね
googleで検索するのはいいね

751 名前:デフォルトの名無しさん mailto:sage [2011/11/11(金) 13:45:27.17 ]
なるほど、じゃあ都道府県にしようかな



752 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 00:51:55.12 ]
やっと指定したパターンを含まない行の検索の書き方が理解できたわ
^((?<!abc).)*$
これね。

753 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 01:59:33.60 ]
何に使おうとしてるんだろう。

754 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 03:35:55.51 ]
abcだけの行に引っ掛かったが良かったな。

755 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 11:36:58.38 ]
>>753
テキストエディタでgrepのまねごとするために使う
これで消せばパターンの行だけ残る、という奴
>>754
ほんとや・・・
なんてこった

756 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 11:41:18.03 ]
>>755
funcchan.blog16.fc2.com/blog-entry-19.html#strdeny

757 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 00:45:47.17 ]
>>755
エディタによっては否定ができて楽なんだけどね

758 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 04:36:21.07 ]
^(?!.*abc).*$

759 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 16:39:59.89 ]
文字列を含まないってかなりごちゃごちゃすると思うんだけど

760 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 19:27:02.75 ]
VSの正規表現がそれに近い
.NETじゃなくてVSのIDEに実装されている方ね

761 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:05:18.60 ]
論理的な作り方さえ学べばそんなにむつかしくはないよ、ごちゃごちゃはするけれど。



762 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:53:23.77 ]
●正規表現の使用環境
MySQL4.1のREGEXP
●検索か置換か?
検索
●説明
カラム内に <> を含むテキストデータがあるのですが
調べたい数字が入っているかを調べたい

●対象データ
3<>4
5<>32<>2
5<>3<>6
3
4

この中から3を含むものを検索したい(32はヒットしないように)

●希望する結果
3<>4
5<>3<>6
3


763 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 11:33:41.51 ]
>>762
行検索なのかな?

764 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 12:10:16.52 ]
>>762
^([0-9]+<>)*3(<>[0-9]+)*$

765 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 12:27:40.68 ]
>>764
ありがとうございます! ばっちりでした。

>>763
1行が1レコードのつもりで書いてました。
結果はヒットするレコードってことで

766 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 20:42:20.38 ]
否定文なんですが
行頭に特定の文字(★や◆など。文字列じゃないです)が入ってる場合は行末まで無視して
それ以外は行末まで強調させる、という条件はどんな風になるでしょうか?
★や◆の場合のみ一行全てを表示させるものは作っているのですが、否定文になるとなんか難しい……
ソフトはテキストエディタの秀丸です。

最初は順番変えたら何とかなりそうだと思ったんですが、どうも少々凝った否定文が必要なようで
ここで質問させていただきます

767 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 20:44:02.00 ]
ちなみに作ってる奴はこんな感じです
[◆|★]+([亜-K]+|[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-za-z0-9]+|[\d0-9]+|[\d!”#$%&’()*+−¥、。…・※?〜:「」々人])+[$]

768 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 20:50:56.29 ]
そのぐちゃぐちゃしてるところは.じゃだめなの?
要件を見ると行頭の特定文字以外には言及してないよね

769 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 21:38:10.05 ]
ト書きのセリフとかかな。

770 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 22:43:13.78 ]
>[亜-K]+|[一-龠]+
何かキモい書き方だな。\pが使えるなら\p{Han}+としたいところだが。
行頭云々言ってる割に正規表現が ^ で始まってないとか、末尾の [$] は $ の間違いかとか、
()の中の文字クラス全部まとめてしまっていいんじゃないかとか、つっこみどころがいろいろ。

で、行頭が★と◆以外の1行なら、
^[^★◆].*$
でどうだ。

771 名前:766 mailto:sage [2011/11/15(火) 00:49:22.72 ]
すみません、自己解決しました。
厳密には解決はしてないのですが
色々と試してたら「 ^(★|◆).*$ 」で問題なさそうだったので、もう止めときます
否定で一行除くの難しすぎる……
秀丸スレでも似た醜態を晒してしまい、申し訳ありません
ゴチャゴチャしてたのは全ての文字に
とにかく符合させようとしてパターンをありったけ突っ込んだ結果です



772 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 02:22:35.77 ]
厳密にどうしたいのかを書いてればすっきりするのに

773 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 06:46:26.04 ]

example.com/%E3%81%82
↑これをexample.com/index.php?word=%E3%81%82にリダイレクトしてたのですが
この度、example.com/%E3%81%82?lang=en にアクセスされた場合
example.com/index.php?word=%E3%81%82&lang=en にリダイレクトしたいのですが
うまく行きません。

RewriteRule ^(.*)(\?(.*))?$ /index.php?word=$1&$3

どのようにしたらいいでしょうか

774 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 13:15:31.02 ]
^([^\?]*)(.*)$
でいいんじゃないかなぁ

775 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 14:15:58.95 ]
>>766
他のソフトで置換した方が早くね?

/^(!?(★|◆)(.*$)/<b>\1<\/b>/g

776 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 14:34:17.89 ]
>>773
スレ違いだけど、ちょっとコメント。

mod_rewiteは正規表現だけのルールでは望む結果を得られないので、
マニュアルをちゃんと読むべし。 末尾のオプションの使い方が鍵。

777 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 16:04:21.31 ]
JavaScriptで
aa1
っていう文字列の塊を1セットで[a-z]{2}[0-9]と表します
この文字列が
fi1cs2bc3wr4
ってう風に4回繰り返されている場合にヒットさせる正規表現はどうかくのでしょうか?
([a-z]{2}[0-9]){4}って感じで書いてみたんですけど(〜){数字}のケースって見たことないんですがどうでしょうか

778 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 16:43:31.93 ]
この手の人ってどうしてマッチするかどうか実際に試してみないんだろう。
何が減るわけじゃなし。2ちゃんに書き込む労力は払うのに。

煽り抜きで、本当にいつも不思議に思う。

779 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 18:28:37.23 ]
自分が気に入らないと煽るクセは直したほうがいいよ

780 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 22:30:45.65 ]
>>774 >>776
ありがとうこざいました!


781 名前:デフォルトの名無しさん mailto:sage [2011/11/15(火) 23:31:37.61 ]
正規表現は正しいのですが.htaccessの問題ぽいので.htaccessスレで聞いてみます。




782 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 06:02:22.65 ]
>>778
誰もが思うことを実際に口に出してツッコミ入れると損するよ。ツッコミ癖は直しておいたほうがいい。
ツッコミキャラほどうざいキャラはないからな。

まぁこのレスもツッコミレスなわけだがw

783 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 11:05:53.76 ]
>>782
自治キャラのウザさは、遙かその上を行く。
いくら草を生やしても中和されない。

784 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 11:52:45.41 ]
草がたりないってことは?

785 名前:デフォルトの名無しさん [2011/11/16(水) 13:58:16.17 ]
質問です。

文字ストリング「"山田","太郎",,"",,"自宅TEL","03-4567-8901"」から、
「"山田"」、「"太郎"」、「""」、「"自宅TEL"」、「"03-4567-8901"を取り出したいのですが、
対象を「.+?」で指定すると、
「"山田"」、「"太郎"」、「"",,"」、「","」が取り出されます。
どのような指定にすれば良いのでしょうか

786 名前:785 [2011/11/16(水) 14:01:28.58 ]
誤「.+?」⇒正「\".+?\"」です。

787 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 14:04:34.81 ]
.*?にする

788 名前:609 mailto:sage [2011/11/16(水) 14:49:26.15 ]
>>785
CSVは一つの正規表現では無理
パースして順番にマッチしていかないと

789 名前:785 [2011/11/16(水) 16:16:51.38 ]
>>787,789
レスありがとうございます。





790 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 20:58:38.08 ]
文字ストリング…

791 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 21:04:31.23 ]
バイトストリングとかあるから別につっかからなくても



792 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 22:46:28.66 ]
Excelできちんとインポートした方が早い気がする。

793 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 23:54:12.68 ]
>>777
どうでしょうね
動くのを正としたいのか、もっとスマートにしたいのか
[0-9]はdにできるし、正規表現に正解はないよ

794 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 01:10:32.91 ]
そういえば前に[0-9]だと駄目で\dにしたらちゃんと置換できたことあった
()の指定とか複数あったからどこかしら書き間違ってたのかもしれんけど・・・

795 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 02:00:57.43 ]
EBCDICな環境だったとか

796 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 09:24:33.46 ]
>>794
まれに \d に対応しない実装もある
JavaScript は明らかに対応してるけどね

797 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 11:12:45.90 ]
EBCDICは関係ないだろー。[A-Z] はなんかあるかもしれんが。

798 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 11:19:34.33 ]
ごめん、そもそもEBCDICに "[", "]" は無かったな。

799 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:01:15.58 ]
●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
文字列の中に同じ文字が2つ以上含まれる行を削除したい

●対象データ
aaaaaaaa
abcabcab
abcdefgh
agbchddf
cbfdaehg
dbcahebg
dffbdeha
echfbgad
fbadcaeh
habcdefg

●希望する結果
abcdefgh
cbfdaehg
echfbgad
habcdefg



見づらいかと思いますが
どうかよろしくお願いします。

800 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:37:21.04 ]
>>799
それは正規表現でやる仕事か?

801 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 14:07:10.47 ]
^.*(.).*(\1).*\n

一応対象データであがってる文字列ではうまくいった



802 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 14:07:14.42 ]
>>799
検索: (^|\n).*?(.).*\2.*\n
置換: \1


803 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 14:37:01.04 ]
>>801-802
助かりました!
バッチリな感じで動作中です
スッキリできました、本当にありがとうございました。

804 名前:デフォルトの名無しさん [2011/11/19(土) 16:27:42.33 ]
いえいえ

805 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 06:55:43.01 ]
へ〜検索の中でも参照できるのか!
このスレ勉強になるなw

806 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 15:26:15.70 ]
出来る場合もあるが、出来ない場合もある。実装次第。

807 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:17:36.13 ]
正規表現で

start.*end
これだと、startから最後のendまで取得してしまう

start.*?end
これだとstartの直近のendまで取得できる

.*の後ろに?を付けると直近のendまでになる理由が理解できません
死んだほうがいいでしょうか(´・ω・`)

808 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 23:16:54.36 ]
?を付けると最後のendまで検索したあとに手前にendがないかを戻りながら再検索します。
手前にもうendが見付からない場合には最後に見付けたendまでマッチすることが確定します。

809 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 23:54:06.93 ]
>>807
正規表現は原則よくばりなマッチ(とれるだけとる)をするんだけど、この原則をひっくり返したものが、.*?

810 名前:デフォルトの名無しさん mailto:sage [2011/11/28(月) 07:30:19.02 ]
もしかしたら
「0個か1個」を意味するメタキャラクタの"?"で、どういう理屈で最短一致になるのか?
という疑問かもしれん。


(量指定子)?

という表現ひとまとまりで、最短一致を表す正規表現となる。そういう約束。
この場合の"?"は「0個か1個」を意味するメタキャラクタとは別物。

行頭を表す"^"と、文字クラス内で否定を意味する"^"とが別物であるようなもの。

811 名前:デフォルトの名無しさん mailto:sage [2011/11/28(月) 13:31:24.66 ]
>>808
>>809
>>810
説明不足なのにエスパーしてくれた>>810さんの通りでした
メタキャラクタの"?"とは切り離して考えないといけないんですね。

ありがとうございました!



812 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 22:16:38.47 ]
SoftalkWEBっていう2chスレ音声読み上げソフト使ってます。

そこで、
>>9

みたいにレスに返事をする部分を
レス9へ返事

と変換したいのですが変換対象と変換結果をどのように指定すればよいでしょうか

813 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 22:26:54.43 ]
>>812
安価以外の「『>』×1〜2+数字」にも絶対反応するけどそれはどうするの?

814 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 23:39:45.17 ]
Javaでaaaa1.txt と bbbb2_2.txtというファイル名が有り、
aaaaと1、bbbb2_と2を抽出したい
どう書いたらいい?


815 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 00:24:08.72 ]
cccc22.txtだったらどうなればいいかとかいろいろ情報不足

816 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 00:42:50.28 ]
一応考えたのは
((^[a-zA-Z_\\-]+)|(^[a-zA-Z_\\-]+[\\-_]))(\\d+)\\.txt$
です

817 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 00:48:44.55 ]
訂正。2つめの[]の中に0-9を追加です

818 名前:815 mailto:sage [2011/11/30(水) 01:10:35.02 ]
ファイル名の最後の数字と分けたいってことでいいのかなぁ。それなら

^(.*?)(\\d+)\\.txt$

で$1と$2に入る。これは検索対象がファイル名であることを前提にしてる書き方だけどね。
これじゃだめなら何が足りないのか書いてね。

819 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 01:50:36.80 ]
>>812
アンカーにはさまざまなパターンが存在し、>>813氏も心配しているような誤反応の可能性がありますが、
シンプル版でよければ。

===
変換対象
(?<=\n)>>([1-9]\d{0,3})(?=[  ])
変換結果
レス$1へ返事
===
アンカーが行頭に存在し、かつ、
アンカーの後ろにスペースが入っている(SoftalkWEBの仕様)場合に置換します。

以下のように、番号を複数指定している場合などには未だ対応できていません。
>>1,2
>>1-2
また、>>1みたいな全角文字にも対応していません。

他のSoftalkWEBユーザの参考になるし、機能追加の要望にもなるので、
SoftTalkのサポート掲示板の方に投稿したほうが良いと思いますが、、、

820 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 02:39:22.37 ]
janeの引用行着色の正規表現を使いまわせそう。
www42.tok2.com/home/proxo/rep/src/rs0033.rep

821 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 12:52:36.20 ]
aの4回以上8回以下の繰り返し「 ^a{4,8}$ 」
ではなくて、
「aの4回または8回の繰り返し」
を ^(a{4}|a{8})$ のように「a」を2回使用せずに、「a」を1回だけ使用して指定する方法を教えてください。



822 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 13:04:10.09 ]
^(a{4}){1,2}$

823 名前:821 mailto:sage [2011/11/30(水) 14:36:25.94 ]
>>822
ありがとうございます

824 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 16:21:29.66 ]
^(a)\1\1\1(\1\1\1\1)?$

825 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 16:58:17.47 ]
^((a)\2{3}){1,2}$

826 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 20:26:15.49 ]
質問です。

性器の生気を正規表現でどうしましょうか?

827 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 23:04:22.59 ]
^(a{4})\1?$

828 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 09:28:19.54 ]
PHP Version 5.2.9
preg_matchです。

電話番号の認証として、
/^\d[\d\-]+\d$/D
を使用していますが、
「1--3」のようなハイフン記号が続く場合の入力を許可してしまっています。

要件として、厳密な電話番号ルールは必要ではありません。
データとして「1-2-3」などを許可しています。

よろしくお願いいたします。

829 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 10:43:50.07 ]
^\d+-\d+-\d+$

830 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 12:25:11.03 ]
^(\d+-){2}\d+$

831 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 13:00:55.38 ]
>>829
素直に書けばそういう感じですね。
目からウロコです。



832 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 13:22:51.62 ]
目からウンコ?

833 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 13:29:59.33 ]
>>830
こちらを使用します。
ありがとうございます。

834 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 14:36:15.33 ]
正規表現は短ければいいってものじゃないからな、一応。短く書いたほうが処理が重くなるケースは多々ある。

835 名前:814 mailto:sage [2011/12/01(木) 15:05:13.05 ]
>>815
アク禁で遅くなりました
ありがとう

836 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 21:01:27.69 ]
asdfg =~ /a|s|d|f|g/
こういうのが一番はやい。/(a-z)/より早い。でもめんどくさい。


837 名前:デフォルトの名無しさん [2011/12/03(土) 20:22:32.94 ]
こ う い う 風 に ス ペ ー ス を 間 に 何 度 も 挟 む
ケ ー ス を 正 規 表 現 で や る と ど う す れ ば い い の か な

838 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 20:28:51.44 ]
マッチさせたいってこと?
([^ ] )+

839 名前:デフォルトの名無しさん [2011/12/03(土) 20:34:55.37 ]
あ、なるほど!

840 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 23:12:53.30 ]
おい!!次スレがこの有様なのか?
hibari.2ch.net/test/read.cgi/tech/1322908056/l50

841 名前:デフォルトの名無しさん [2011/12/05(月) 16:10:59.60 ]
●正規表現の使用環境
C#

●検索か置換か?
検索して、マッチしたものをキャプチャして置換したい。

●説明
文字列の演算式の項をキャプチャして置換したい。
演算子には、+,*,()のみが使用可能。括弧の入れ子も可能。

●対象データ(ex.)
(aaa+bbb)*(ccc+ddd)
があったとき、まず、aaa,bbb,ccc,dddをキャプチャして、
文字列変換(別途用意済)をする。
次に、それぞれ変換した文字列を元の式に戻す。
例えば、文字列変換が小文字⇒大文字への変換だった場合、
(AAA+BBB)*(CCC+DDD)
としてたい。
実際には、
string strBefore = "aaa";
string strAfter = 変換メソッド(strBefore);
という感じで、独自の変換メソッドを用意しています。

aaa*(bbb+ccc) ⇒ AAA*(BBB+CCC)
aaa*((bbb+ccc)+ddd) ⇒ AAA*((BBB+CCC)+DDD)



842 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 16:45:57.87 ]
正規表現使う必要無くね?

843 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:15:20.40 ]
ただのstrupr処理だわなw

844 名前:841 [2011/12/05(月) 17:27:54.69 ]
>>843
struprはあくまで例です。
ここで複雑な変換処理の式を出しても混乱するだけだと思ったのでupperを出しただけです。
>実際には、
>string strBefore = "aaa";
>string strAfter = 変換メソッド(strBefore);
>という感じで、独自の変換メソッドを用意しています。
ここで事情は説明したつもりなのですが・・・


845 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:42:16.92 ]
ふつう正規表現でやるのは項の定義止まりだよ

846 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:46:12.47 ]
説明を簡略化しすぎても混乱してしまうよ。それと求めているのは正規表現そのものではなくて
正規表現のサンプルコードか何かのような気がするのだが・・。

847 名前:841 [2011/12/05(月) 18:16:25.27 ]
>>846
すみません、たしかにロジックの説明は余計だった気がします。
教えて頂きたい正規表現は、四則演算「っぽい」文字列にマッチするかどうかというものです。
マッチさえすれば、あとはキャプチャして置き換えればよいとの認識です。

宜しくお願い致します。


848 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 18:31:39.00 ]
もとの制限を考えれば、+,*,() 以外の文字の連続がほしいものなんじゃないの?

849 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 22:23:58.80 ]
>>844
文字列の中に式らしき部分があって、その要素(項)を別に定義した約束事で
置換するというのでいいのかな。

850 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 22:50:20.98 ]
>>842>>843的な意味で書いたのではなく、文字列操作関数だけでも出来るんじゃないかと思ったので書いた。
正規表現でやったほうが楽だけどね、処理速度は遅いけど。

・項にはどんな文字が使われるのか、英字だけなのか、ひらがなや漢字、数字なども含まれるのか 例、時間*時給
 (これがはっきりしないと書きようが無い)
・式の前後には改行は入っているのかいないのか
・全角文字には対応するのかしないのか 例、F+G

これらが分かれば簡単に書けるから誰かしらが作ってくれると思うよ。

851 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 22:54:13.82 ]
あ、括弧の入れ子を厳密に判定しようと思ったら普通の正規表現では無理。鬼車っていうライブラリを使ってるなら
簡単に対応出来る。鬼車でない場合は文字列操作関数で頑張ったほうが正確に判定出来ていいかも。



852 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 23:07:39.25 ]
使われる全ての文字の連続を検出すれば良い。
括弧が正確に対応するかは個別にCheck。正規表現使わなくていい。


853 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 23:07:41.69 ]
>>851
括弧の入れ子とか別に関係ないじゃん?

854 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 23:23:12.62 ]
>>853
((((aaa+bbb)*ccc(ddd)

こういう括弧の数が合わないものは式でない可能性が高い。それを置換してしまってもいいのかな?

855 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 23:35:58.54 ]
>>854
それを考慮するってことは、式の始まりまたは終わりを判断するつもりがあるということか。

856 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 23:44:00.41 ]
それをしなかったら正規表現使う意味なくない?

857 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 02:48:57.24 ]
だから正規表現いらなくねって意見がでてんでしょ

858 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 06:28:53.19 ]
括弧の入れ子の判定は正規表現でやったほうが断然楽だわな。いらないと思う人はこれが出来ない人なんだろう。

859 名前:841 [2011/12/06(火) 08:54:43.49 ]
>>850
ご指摘ありがとうございます。

項はある検索エンジンで使用する独自の式が入ります。
"TERM"という定数に項を表す正規表現が記述されている、として頂ければと思います。
const string TERM = "●●"//●●←項を表す正規表現

式の前後に改行は入りません。
全角文字は、項の中ではありますが、+、*、(、)は半角のみを許可します。

よろしくおねがいします。

860 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 09:23:04.74 ]
難しい問題の合間に箸休めでお答えください
数字の入っているファイル名を置換したいです。

あああいいい01.txt
AABB0002.txt
なむなむ003.txt
TYTY4.txt
    ↓
THX001.txt
THX002.txt
THX003.txt
THX004.txt

.+(\d)(\d?)(\d?)(\d?)\.txt
などと、いろいろ試してはみたんですがうまくいきません。
どうかお力添えのほどをよろしくお願いします

861 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 11:33:14.28 ]
>>860
.+(\d)+\.txt

こういうこと?



862 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 11:43:15.81 ]
>>851
鬼車つかって簡単に対応したのを書いてもらえますか

863 名前:860 mailto:sage [2011/12/06(火) 17:48:58.84 ]
>>861
レスありがとうございます。
条件をもう少しちゃんと書けばよかったですね
数字部分が0255などの時うまく置換できないのです。
数字部分だけで言うと、001,002,・・,255,・・880
のような形で置換したいです。
置換の方への記述の仕方もよくわからず、できればそちらもお願いいたします

864 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 18:02:07.72 ]
>>863
>>4

865 名前:860 mailto:sage [2011/12/06(火) 18:28:08.59 ]
>>864 失礼しました

●正規表現の使用環境
psstpsstというリネームソフト(Perl互換)

●検索か置換か?
置換

●説明
最大4桁で書かれた数字部分を3桁に統一したい

●対象データ
ABCA01.txt
BCAA2.txt
CABA0255.txt

●希望する結果
AAA001.txt
AAA002.txt
AAA255.txt

どうぞよろしくおねがいします

866 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 20:38:24.42 ]
数字部分を3桁以上にしてから
(\d+\.)
000\1

下3桁だけ切り出し
\d*(\d{3}\..*)
\1

867 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 22:41:35.61 ]
>>841のは再帰を理解できるような拡張した正規表現を使えないとダメだろ。
そんなのあるのか。

868 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 22:48:48.50 ]
PCREは無限の括弧の対応が取れる ~ 再帰も、ネストも、あるんだよ.
swatmac.info/?p=716

正規表現の限界 @ Shibuya.pm
swatmac.info/etc/shibuya_pm/pix/recursive-regex.png
swatmac.info/etc/shibuya_pm/

869 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 23:22:37.09 ]
で、再帰が使えると>>854が懸念するようなことも解決できるの?

870 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 23:35:32.29 ]
理解してないができるはずだろ。マッチしないとき、括弧が足らないなどのエラーが判明する。


再帰的パターン
どうすればカッコに括られた文字列とマッチできるか、という問題を 考えて見ましょう。
このとき、カッコは何回でもネストできるとします。
再帰が使えないとすると、パターンを用いて、せいぜい、ある一定の深さの ネストまでしかマッチできないでしょう。
任意の深さのネストを 処理することは不可能です。
Perl 5.6 では、正規表現において再帰を行う 実験的な機能が導入されています。
PCRE では、再帰という特殊なケースに対して専用のシーケンス (?R) が導入されました。
php.net/manual/ja/regexp.reference.recursive.php

871 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 23:46:03.39 ]
出来るよ、このスレでこんな認知度低いほうが意外なくらい。



872 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 23:58:07.19 ]
windowsで手軽にpeclの動作確認する方法ありますか。

873 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:00:50.43 ]
xampp入れてPHPですかね。

874 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:03:36.96 ]
認知度の話じゃなくて、項には全角も含まれるといわれている状態で、再帰でできるとか言ってるのが斜めってることに気づかないのかな。

「たとえばほげほげ+fooという文字列」
↑この中の項をどうやって判別するの。


875 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:07:35.69 ]
全角や、英数のみはたいした問題でない。
どの文字を許可するかはそのつど変わる。

876 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:12:27.18 ]
だから現状ではできない、でおk?

877 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:18:13.56 ]
なんでよ?
文字コードの問題があるけど、たとえばUTF32などだったら英数も全角も同じバイト長で区別はない。

878 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:23:06.12 ]
>>877
>>855でも書いたけど、式の始まりと終わり、項と項以外をどうやって判断するの?

体重+年齢と性別*5
このとき、何が項として抽出されるべきかを書いてみ?
べつに>>874でもいいけど。

879 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:25:53.18 ]
項に使える文字はあらかじめ指定するんだろ。
たとえば[0-9a-z]としてあとで変更することもできる。
全角になったとしてもたいした問題でない。

880 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:26:54.45 ]
>>878

こうわけるのが普通だろ。他にどう分けるんだよ。

体重  +  年齢と性別  *  5

881 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:29:23.51 ]
対象文字列が式のみかどうかなんて書いてないよな。



882 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:31:54.36 ]
対象文字列が式のみであるという前提を勝手につけるなら、わざわざ括弧の整合性チェックをする必要なんてないよな。

883 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 01:05:10.14 ]
>>882
いつまで雑魚の相手をするつもりなんだ?

884 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 01:12:28.09 ]
>>841
正規表現はマッチするだけ。置換処理はプログラミングの分野。はき違えてはいけない。
ideone.com/2xlKW

885 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 01:24:06.45 ]
項の部分は質問者さんが正規表現を作るのかな、>>859を読むとこう取れなくもないのだが。
>>850で「はっきりしないと書きようがない」と言われてるのにはっきりさせないから混乱するんだ。

886 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 01:53:13.54 ]
項は仮に[a-z0-9]でいいだろ。

887 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 04:54:20.90 ]
>>884
そんな手間かけてゴミレス付けんなよ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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