1 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:16:48 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 【 前スレ 】 正規表現 Part6 pc12.2ch.net/test/read.cgi/tech/1241537764/
160 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:22:28 ] ↑ 偉い偉い その優秀な頭脳で後読みが使えるブラウザを書いてくださいね!
161 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:18:15 ] '20100427' を (\d\d\d\d)(\d\d)(\d\d) でマッチさせると2番目は '04' となります。 このようなときに、先頭の0を取り除いて4を切り出すということは正規表現だけで実現できるでしょうか?
162 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:34:06 ] (\d\d\d\d)0(\d)(\d\d)
163 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:42:13 ] すみません、もちろん仮定は「同時に '20101203' が 2010, 12, 3 と切り出せること」です。
164 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:47:59 ] (\d\d\d\d)0?(\d?\d)0?(\d?\d) だと、 20100403 の時に変なことになるし、 たぶんできない。
165 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:55:32 ] (\d\d\d\d)(?:0|([1-9]))(\d)(?:0|([1-9]))(\d) と1桁ずつキャプチャしてつなげるとか?
166 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 16:54:53 ] ↑ 偉いなあお前らは 俺はワイルドカードも使えないがせいぜい頑張ってな
167 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:03:00 ] 単一のキャプチャの(...)でこの2つの場合を区別するのは ムリだろ。入り口が有限状態オートマトンの1状態にしか 対応させられないから1桁とるべき場合か2桁取るべき場合 かの情報の持ちようがない。
168 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:32:05 ] >>161 (\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
169 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:33:09 ] すまん間違えた (\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)
170 名前:168=169 mailto:sage [2010/04/27(火) 19:34:30 ] 二重に間違えてるし…吊ってくるorzorz ^(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)$
171 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 19:53:14 ] あー、^はいらないか 後ろが行末じゃない場合にも対応するならこうかな (\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)(?!\d)
172 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:17:03 ] 正規表現一本でなんでもかんでもやろうとするのって PerlやRubyで一行野郎と変わらない阿呆だな
173 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:01:58 ] ↑ 偉いなあお前は 優れたツール使って頑張ってな
174 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:33:41 ] レベル低いな
175 名前:デフォルトの名無しさん [2010/04/27(火) 22:34:36 ] >>172 正規表現一本も読めない奴が、このスレで何してんの?
176 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:27:25 ] ↑ 優秀なんだな君は 俺はワイルドカードも使えないが正規表現で頑張ってね
177 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:45:23 ] ↑ a = b a^2 = ab a^2 - b^2 = ab - b^2 (a + b)(a - b) = b(a - b) a + b = b 2b = b 2 = 1
178 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:32:33 ] >>177 なつかしすw
179 名前:デフォルトの名無しさん [2010/04/28(水) 07:42:31 ] (a + b)(a - b) = b(a - b) a + b = b 0でわるな
180 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 08:49:34 ] >>177 a=42 b=-22のとき
181 名前:デフォルトの名無しさん [2010/04/28(水) 12:26:37 ] JavaScriptです 「xxxx=任意&yyyyyyy=任意&zzzzzz=任意」 と言う文字列から任意の値を各々取るにはどうしたらいいでしょうか? xyzの文字は各々固定で、任意には何文字入るかわかりません 0文字もあります 欲しい結果は3つ xxxx=任意 yyyyyyy=任意 zzzzzz=任意
182 名前:181 mailto:sage [2010/04/28(水) 13:42:54 ] 自己解決 sage忘れすまん
183 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 15:30:15 ] 教わっといて自己解決かよw
184 名前:181 mailto:sage [2010/04/28(水) 15:46:38 ] >>183 いや、JavaScriptスレでもマルチしたけど 結局、正規表現ではダメだったのよ まぁ…すいませんでしたw 勉強します
185 名前:デフォルトの名無しさん [2010/04/28(水) 21:22:49 ] ●正規表現の使用環境 Perl5 ●検索か置換か? 置換 ●説明 行の最後が > じゃない行(改行コードだけの行も含む)の 改行コード を 改行コード<br>にしたい 改行コードは \n \r \r\n どれでもできるようにしたい ●対象データ <p>あいうえお</p> かきくけこ <p>たちつてと</p> ●希望する結果 <p>あいうえお</p> かきくけこ<br> <p>たちつてと</p>
186 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:59:29 ] 頑張ってみたけど、先読みを使うと、\r\nの時に都合が悪くて、 解決方法がわからんかったので置き換えでごり押し。 s/([^>])(\r\n|[\n\r])/$1<br>$2/sg; 改行コードを統一すると、先読みでもう少しスタイリッシュにかけた。 s/(?<!>)(?=\n)/<br>/sg; 何に使うかしらないけど、出力先のOSをみて改行コードを置き換えてもいいと思うんだけど。 サンプルは以下。 my @str = ( "<p>aiueo</p>\nkakikukeko\n<p>sasisuseso</p>\n", "<p>aiueo</p>\rkakikukeko\r<p>sasisuseso</p>\r", "<p>aiueo</p>\r\nkakikukeko\r\n<p>sasisuseso</p>\r\n", ); foreach(@str){ s/([^>])(\r\n|[\n\r])/$1<br>$2/sg; s/\r\n?/\n/g; # 表示確認のため、改行コードを\nで統一 print; print "-------------\n"; }
187 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 02:04:27 ] >>186 ありがとうございます。 これをよく見て勉強します。
188 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:11:51 ] >>187 こういう解法もある s/(.)(\r\n|\n)/$1 eq '>' ? "$1$2" : "$1<br>$2"/sge; eオプションが使えると色々応用が効くよ
189 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:25:13 ] Perlならね。
190 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 02:26:32 ] ありがとうございます。 これをよく見て勉強します。 ↑ 頑張ってください
191 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 09:40:13 ] sge-
192 名前:デフォルトの名無しさん [2010/05/02(日) 09:58:16 ] 適当なフリーのテキストエディタで正規表現を使って以下のような置換を行おうとしたのですが 正規表現には素人なので2つめのパターンをどう表現すればいいのかよく分かりませんでした。 どう書けば上手く置換できるのか教えてください。 1つめのパターン [[XXXXX]] → {{abc|XXXXX|}} (XXXXXは任意の文字列) 2つめのパターン [[XXXXX|XXXXX 《YYY》]] → {{abc|XXXXX|def=YYY|}} (置換前の2つのXXXXXは同一の文字列) 例えば [[日本]] - [[アメリカ合衆国|アメリカ合衆国 《米国》]] - [[イギリス|イギリス 《英国》]] - [[ドイツ]] - [[フランス]] - [[中華人民共和国|中華人民共和国 《中国》]] - [[大韓民国|大韓民国 《韓国》]] - [[グアテマラ|グアテマラ 《グァテマラ/ガテマラ》]] - [[朝鮮民主主義人民共和国|朝鮮民主主義人民共和国 《北朝鮮》]] - [[メキシコ]] - [[ギリシャ|ギリシャ 《ギリシア》]] のようなテキストを、 {{abc|日本|}} - {{abc|アメリカ合衆国|def=米国|}} - {{abc|イギリス|def=英国|}} - {{abc|ドイツ|}} - {{abc|フランス|}} - {{abc|中華人民共和国|def=中国|}} - {{abc|大韓民国|def=中国|}} - {{abc|グアテマラ|def=グァテマラ/ガテマラ|}} - {{abc|朝鮮民主主義人民共和国|def=北朝鮮|}} - {{abc|メキシコ|}} - {{abc|ギリシャ|def=ギリシア|}} のように置換したいのです。
193 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 10:06:13 ] 正規表現 欲張り
194 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:36:16 ] {A},{B} という文字列に下記正規表現はマッチすると思うのですが \{(.+)\} *, * \{(.+)\} マッチしません。どこがまずいのですか?
195 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:44:04 ] \{(.+)\} *, *\{(.+)\}
196 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:46:07 ] >>195 ありがとうございます。 スペースが入っていましたねw 気づきませんでした。
197 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:31:14 ] (V)o¥o(V)
198 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 18:24:33 ] そりゃ工業高校なんかで最低限の技能をなにか一つ身に付けてる奴なら年齢が最強の武器になるよ 何となく大学院まで行ったような学生よりよっぽど将来有望だ でも3年間何もせずただ学校に通ってただけってんじゃ駄目だろ 何もしてないどころか勉強ばっかりやって3年間無駄に歳だけ喰って 社会じゃ役に立たない能書きだけ一人前になってたんじゃしょうがないだろ だから普通科の高卒は中卒以下だって言ってんだよ
199 名前:デフォルトの名無しさん [2010/05/05(水) 22:01:58 ] 前に、このすれで、()の中身を配列に入れていく正規表現があった。 (())でも、それぞれの中身を入れていく優れものだった。 あれの発展版で、文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9 のそれぞれの文章を配列に入れれる正規表現はできないものだろうか?
200 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:25:37 ] 日本語でおk
201 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:34:50 ] >>199 その正規表現って ((o)(o))ってあってもちゃんと乳首取れる? ていうか言語クラス違うくね?できるもんなのか。
202 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:35:51 ] 近所が自転車盗まれたても、相当離れてるけどジュース置いたら逮捕w 姉はそれでおっぱい触られたって。 これひどくね?友達の姉の実話な。
203 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:48:00 ] 入れ子になってても順番にキャプチャできる 123456789 に対して 1(2(3)4)5(6(7)8)9 としたら キャプチャ結果は 234, 3, 678, 7 になる >>199 が何を求めてるのかいまいちよくわからんが
204 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 08:53:49 ] >文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9 がデータだろうから 1(2(3)4)5(6(7)8)9 を与えたら 1, 2, 3, 4, 5, 6, 7, 8, 9 がほしいんだと思うぞ 一方ロシアでは split を使った
205 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 12:35:18 ] >ていうか言語クラス違うくね?できるもんなのか。 日本語でOK。
206 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 15:17:54 ] >>205 正規表現であって、文脈自由文法じゃないけどできるものなの? ってことだよ。俺の理解不足だったらすまないが。
207 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 15:47:52 ] >>204 たしかにネストなんか気にせずに'('と')'を区切り記号としてsplitするだけでいいな。 さすがロシア。
208 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:01:02 ] 確かに、わざわざ正規表現で処理する内容じゃないなw
209 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:22:49 ] さくらエディタを使っていて CHAPTER01=00:00:00.000 CHAPTER01NAME=第一部 オープニング CHAPTER02=00:09:13.400 CHAPTER02NAME=オラはにんきもの こういうのを TRACK 01 AUDIO TITLE "第一部 オープニング" INDEX 01 00:00:00 TRACK 02 AUDIO TITLE "オラはにんきもの" INDEX 01 09:13:40 こうしたいんですが、正規表現でできるもんなんでしょうか できるとしたら答えを貰えるのが一番ですが、どこら辺を調べればいいのかヒントをもらえないでしょうか
210 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 19:01:48 ] >>209 出来る サクラエディタの正規表現はperl互換だからperlの正規表現調べればいけると思う 一応、答えると CHAPTER(\d\d)\=(\d\d\:\d\d\:\d\d)\.\d\d\d\r\nCHAPTER\d\dNAME\=(.*?\r\n) を TRACK $1 AUDIO\r\nTITLE \"$3\"\r\nINDEX 01 $2\r\n で置換すればいいんじゃないかと思う。 (一番最後のINDEX 01ってのがINDEX 02の間違いなら、置換をINDEX 01からINDEX $1に変えてね) 多分
211 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:19:48 ] >>210 おお!出来ました。ありがとうございます。 正規表現はperlのが使えたんですね。これを機械に勉強してみます。
212 名前:デフォルトの名無しさん [2010/05/12(水) 03:15:50 ] php 5.2です。 あるテキストファイル内の文字列から、''や""で囲まれた場所以外の半角スペースとタブを削除したいんですが(preg_replace?)、 どんな感じにすればいいんでしょうか?
213 名前:デフォルトの名無しさん [2010/05/15(土) 19:34:41 ] 以下のような文章があって、NAME〜からENDまでの間の文字を正規表現で抽出するにはどうすればよいのでしょうか? NAME〜とENDは含みません。 NAME Haruhi Suzumiya Haruhi is the title character and leader of the SOS Brigade, whose energetic and eccentric character proves to be the driving force for the series. She has a mind for adventure, which often leads her subordinates to be swept into her plans. END
214 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 19:39:38 ] >>213 NAME[\s ]?(?.+)\nEND
215 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 07:33:29 ] いい加減な回答だなw
216 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:29:45 ] 正規表現で、"あ(い(う)え(おか)き)くけ" から一番外側の()の中身を取得するにはどうすればよいですか?
217 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:33:54 ] 言語による
218 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:38:27 ] \1
219 名前:デフォルトの名無しさん [2010/05/20(木) 22:14:10 ] ●正規表現の使用環境 Perl5 ●検索か置換か? 検索 ●説明 りんごにマッチする文字列を検索。 青りんごは対象外としたい。 ●対象データ 1,いちご、青りんご、みかん 2,いちご、青りんご、りんご 3,いちご、りんご、みかん ●希望する結果 2と3がマッチ お願いします
220 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:45:52 ] (?<!青)(りんご)
221 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:46:36 ] >>219 /\bりんご\b/
222 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 02:16:16 ] >>220 りんごの括弧はいらないだろ。 >>221 蜜りんごは?ねぇ、俺の大好きな蜜りんごは?
223 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 05:39:03 ] www.youtube.com/watch?v=h-mxZ-ijPs8 www.youtube.com/watch?v=yWZWWKOp9qU www.youtube.com/watch?v=657bBDalKQo www.youtube.com/watch?v=Fi_YvuAPdNg www.youtube.com/watch?v=zzNZz590adI www.youtube.com/watch?v=U3HqWCALUNs www.youtube.com/watch?v=gUZj2i6U-aw www.youtube.com/watch?v=iq9s9FJMk_c www.youtube.com/watch?v=qTemVhatInQ
224 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 07:53:34 ] >>220-221 ありがとうございます。
225 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 09:08:55 ] ★青葉りんご彡☆
226 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 19:33:34 ] Javaで鬼車使うには、ランタイムを再コンパイルするしかないの?
227 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 00:57:13 ] ●正規表現の使用環境 JavaScript2.0? ※Firefox3.5.9+Greasemonkey 0.8.20100408.6+WindowsXP Pro SP3 ●検索か置換か? 置換 ●説明 ( と ) ※括弧と括弧閉じを含む文字列を置換したい。 ●対象データ (Update:2010/01/02) ●希望する結果 (Update:2010/02/03) 続きを書きます。
228 名前:277 mailto:sage [2010/05/22(土) 01:00:01 ] 変数の wordsBrf.push(""); の "" の中に\マークを入れたりせずに、 文字列を置換させたいです。 //文字を置換 var wordsBef = new Array();//置換前 var wordsAft = new Array();//置換後 wordsBrf.push("(Update:2010/01/02)");//置換前 wordsAft.push("(Update:2010/02/03)");//置換後 var body = document.body.innerHTML; var i = 0; for (i = 0; i < (words.length); i++) { var w = new RegExp( words[i], "gi" ); var body = body.replace( w, words[i] ); } document.body.innerHTML = body;
229 名前:277 mailto:sage [2010/05/22(土) 01:06:01 ] 実際には、Webサイトにある更新日 (Update:2010/04/30) という 文字の色を変えるのに使いたいです。※更新”されていない”ものは赤で表示。 TCP Monitor Plus (OGA'sさんのサイト) hp.vector.co.jp/authors/VA032928/ //バージョン更新チェック var color = new Array(); var words = new Array(); color.push("#FF0000"); words.push("Ver2.42");//TCP Monitor Plus words.push("(Update:2010/04/30)"); var body = document.body.innerHTML; var i = 0; for (i = 0; i < (words.length); i++) { var w = new RegExp( words[i], "gi" ); var body = body.replace(w, "<font color='" + color[0] + "'>" + words[i] + "</font>"); } document.body.innerHTML = body; どうかよろしくお願いいたします。
230 名前:277 mailto:sage [2010/05/22(土) 01:07:27 ] 説明が下手ですみません。 変数の値に直接エスケープ文字を入れたくないという事です。 よろしくお願いします。
231 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:23:34 ] >>230 本文読んでないけど、メタ文字をエスケープ出来れば済むのならjavascript quotemetaでぐぐるんだ
232 名前:277 mailto:sage [2010/05/22(土) 01:36:41 ] >>231 (*・∀・)ノこんばんわ。 レスありがとうございます。 quotemetaはPerlでしか使えないのか〜(´・ω・`)と思っていたら、 メタ文字のエスケープ関数のサンプルが載っているサイトがありました。 //追加 function quote(str){ return str.replace(/\W/g, function($0){ return '\\' + $0; }); }; //変更 var w = new RegExp( quote(words[i]), "gi" ); これで出来ました! 夜遅くにどうもありがとうございました!
233 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:43:12 ] グローバルフラグを付けなくてもいいようなケースにもグローバルフラグを付けた場合 どれだけ無駄になりますか?とてつもなく無駄ですか?微々たるものですか?
234 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:52:06 ] 検索対象の文字列長による。 グローバルフラグをつけさえしなければ、 最初のマッチング位置以降の文字列は読み込まないので。 ただし、検索対象の文字列の中にマッチングする対象が無い場合は グローバルフラグをつけた場合と同じぐらいコストがかさむ。 もう作っちゃったなら、性能問題出てから考えたら。
235 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:55:32 ] >>234 どうもありがとうございます。特に何も感じなかったら気にしないことにします
236 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 02:17:39 ] ●正規表現の使用環境 C# 3.0 ●検索か置換か? 検索 ●説明 各行の1番目のAまでを検索したい { と } に囲まれた文字列を検索したい ●対象データ Memo[0]{ [Text] 対象データ } ●希望する結果 [Text] 対象データ よろしくお願いします
237 名前:デフォルトの名無しさん [2010/05/30(日) 10:50:00 ] >>216 亀レスだけど、 \(.*\) で最長一致検索すれば、一番外側の()である (い(う)え(おか)き) にマッチする ちなみに、\(.*?\)で最短一致検索すれば "(い(う)"と"(おか)"の2箇所にマッチする
238 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:04:43 ] 強欲マッチってどういう時使うの?
239 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:13:50 ] 例えば文中の全ての数字の並びを抽出したいときに /(\d+?)/g とかやると切ないことになる
240 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:29:59 ] じゃ手放さない(バックトラックしない)強欲マッチは?
241 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 00:43:24 ] パフォーマンスだろ。
242 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 01:31:28 ] よくわかりません。
243 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 08:06:13 ] 鬼車の欲張りと強欲の違いがわからない ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
244 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 12:12:44 ] 手放さない欲張りマッチを使って失敗するような場合はあるんですか?
245 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 10:32:38 ] javascriptです aiueo aiue iueo にはマッチするけどiueにはマッチしないってどう書けばいいですか? /a?iueo?/ だとiueにもマッチしてしまって /a?iueo|aiueo?/ だと期待通りにはなるのですが 重複する記述があるのでまとめられるならまとめたいです 共通する部分がiueじゃなくてもっと複雑になった場合など
246 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:08:31 ] 245 自己レスです /a?(iue)o|a\1o?/ こうかな・・・
247 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:26:17 ] >>246 僕もそう思った。
248 名前:デフォルトの名無しさん [2010/06/06(日) 10:57:14 ] 質問です javascriptです。 IMG00123123.jpgというような文字列が配列に大量にある。 そんな中で、例えばIMG00000012.jpgを検出したい。 そのものずばりで検索すれば、何も問題はないのですが、 不精をして、12だけで、マッチさせたい場合、どう考えればよいでしょう?
249 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:13:15 ] JavaScriptってsprintfないんだな。意外だ ("00000000" + "12").substr("12".length);
250 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:06:30 ] Number("IMG00000012.jpg".match(/\d+/)[0]) == 12
251 名前:デフォルトの名無しさん [2010/06/06(日) 12:15:14 ] >>249 ありがとうございます。 後ろから検索する事と、 文字列の長さを利用して、 "00000000"と"12"を分割する、という考え方ですね。 ちょっと検証してみます。
252 名前:デフォルトの名無しさん [2010/06/06(日) 12:55:22 ] >>250 あ、ありがとうございます。 現在>>249 の考え方で検証中です。。 str:検索対象の文字列(ファイル名)例:IMG012312.jpg a:検索の為の入力された数値 例:12 c=str.lastIndexOf(a+".") if(c>-1) { d=str.slice(0,c); e=(d.match(/[1-9]/).length if(e>0) { alert("strは、00000012.jpgではない"); }else{ alert("strは、00000012.jpgだ"); } おおよそこんな処理になるでしょうか?
253 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:06:18 ] 正規表現もだけど、それ以外のところがボロボロだからjsスレ行ってこい
254 名前:デフォルトの名無しさん [2010/06/06(日) 14:13:08 ] >>253 エラーだらけですみません。デバッグしてませんでした。 str="IMG001012.jpg "; a=12; c=str.lastIndexOf(a+".jpg") ;//後方から"12.jpg"で検索 //引っかかれば、12.jpgの部分がある //なければ-1が帰ってくる if(c>-1) { //検索に引っかかった場合次は、 //文字列strの0番からc-1番までが、 //0以外の文字を含むか検証する必要がある d=str.slice(0,c); //strの0番からc-1番までを抜出し変数dに代入 //文字列dの中に1から9の任意の値がなければnullが帰ってくる //strは少なくとも12.jpgではないと言えるので if((d.match(/[1-9]/g))==null) { alert("12.jpgの候補だ"); }else{ alert("12.jpgではない"); } } こんな感じで絞り込めました。 後は、imgとかの違いや、0の数での違いをどう処理するかかなと 思いますが、、
255 名前:デフォルトの名無しさん [2010/06/06(日) 14:18:33 ] すみません。以下訂正します 誤//strは少なくとも12.jpgではないと言えるので 正//strは少なくとも複数の0と12.jpgからなる文字列だといえるので
256 名前:デフォルトの名無しさん [2010/06/06(日) 15:07:04 ] >>250 n=Number("IMG00000012.jpg".match(/\d+/)[0]); alert(n); で検証しました。確かに12ですね。 \d+:任意の数値の1回以上の表現 これで、00000012が配列として抽出される で、問題は[0]ですが、 これは、もしかして配列の0番ということですか? こんな使い方が出来るとは知りませんでした。 この手法だと、直接値を比較できますね。 ありがとうございました!!
257 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:50:34 ] リファレンス嫁 https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/String/match >正規表現が g フラグを含んでいない場合、regexp.exec(string) と同じ結果を返します。 https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp/exec >[0] 最後にマッチした文字 配列じゃなくてプロパティ 厳密には配列もプロパティの集まり つーかjsスレ(ry
258 名前:デフォルトの名無しさん [2010/06/06(日) 16:42:14 ] >>257 すみませんでした(平謝り) 上記リファレンス、頭から読み直します。 ありがとうございました。
259 名前:デフォルトの名無しさん [2010/06/11(金) 23:05:13 ] 質問させてください。 ●正規表現の使用環境 - Mery(エディタ、鬼車ライブラリ) ●説明 - 連続する同じ内容の2行にマッチ、3行以上の部分にはマッチさせない ●対象データ ABCD ABCD EFGH EFGH EFGH ●希望する結果 ABCDの2行のみマッチ、EFGHの2行のところ(2箇所)はスルーして欲しい。 --- 否定先読みと否定戻り読みを同時に使ってみたところ、 たぶん否定戻り読みの\1の参照が変なため上手くいきませんでした。こんな感じ。 (?<!\1)(^.+\n)\1\1(?!\1)
260 名前:259 [2010/06/11(金) 23:08:36 ] >>259 すみません。例では「\1」が1個多すぎました。 × (?<!\1)(^.+\n)\1\1(?!\1) ○ (?<!\1)(^.+\n)\1(?!\1) …どっちみちダメな例ですが、いちおう。。