正規表現 Part7at TECH
正規表現 Part7 - 暇つぶし2ch150:デフォルトの名無しさん
10/04/26 20:41:27

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!


151:145
10/04/26 21:08:58
>>147
なるほどねー
パンチカード世代のUNIX系知らない団塊は毛嫌いするって事か
まぁ今更勉強しろとは言わないけど最低限読めるように頑張れよ>>150


152:デフォルトの名無しさん
10/04/26 23:51:58

偉い偉い
その優秀な頭脳でいっぱい仕事してくださいね!

153:デフォルトの名無しさん
10/04/26 23:53:57
2・3日前くらいからいろんなスレでキチガイを見かけるが同一人物か?

154:デフォルトの名無しさん
10/04/27 00:46:11
今時、正規表現のロジックが理解できない奴は新しいコードなんて書けない
既存の古いコードのメンテでもやってればいい

155:デフォルトの名無しさん
10/04/27 00:48:52

偉い偉い
その優秀な頭脳で新しいコードいっぱい書いてくださいね!

156:デフォルトの名無しさん
10/04/27 01:37:23
否定先読みなんかはどうも感覚と一致しなくてバグが潜んでたりするなぁ

157:デフォルトの名無しさん
10/04/27 01:44:59

偉い偉い
その優秀な頭脳でバグのないコードいっぱい書いてくださいね!


158:デフォルトの名無しさん
10/04/27 01:45:25
最近いろんなブラウザでJavaScriptのエンジン開発やってるけど
正規表現の後読みが使えるブラウザって存在するの?

どっかのブラウザが対応したらその流れでIE9でも対応しないかなと期待してるんだけど。

159:デフォルトの名無しさん
10/04/27 02:07:53
正規表現エンジンは、どのブラウザも全く同じ。
基本的に、コアの実装はIEでさえ標準に準拠してる。
ブラウザ間の差があるのは、「クライアントサイドJavaScript」の部分。


160:デフォルトの名無しさん
10/04/27 02:22:28

偉い偉い
その優秀な頭脳で後読みが使えるブラウザを書いてくださいね!

161:デフォルトの名無しさん
10/04/27 13:18:15
'20100427' を (\d\d\d\d)(\d\d)(\d\d) でマッチさせると2番目は '04' となります。
このようなときに、先頭の0を取り除いて4を切り出すということは正規表現だけで実現できるでしょうか?


162:デフォルトの名無しさん
10/04/27 13:34:06
(\d\d\d\d)0(\d)(\d\d)

163:デフォルトの名無しさん
10/04/27 13:42:13
すみません、もちろん仮定は「同時に '20101203' が 2010, 12, 3 と切り出せること」です。


164:デフォルトの名無しさん
10/04/27 13:47:59
(\d\d\d\d)0?(\d?\d)0?(\d?\d) だと、
20100403 の時に変なことになるし、
たぶんできない。

165:デフォルトの名無しさん
10/04/27 13:55:32
(\d\d\d\d)(?:0|([1-9]))(\d)(?:0|([1-9]))(\d)

と1桁ずつキャプチャしてつなげるとか?

166:デフォルトの名無しさん
10/04/27 16:54:53

偉いなあお前らは
俺はワイルドカードも使えないがせいぜい頑張ってな

167:デフォルトの名無しさん
10/04/27 17:03:00
単一のキャプチャの(...)でこの2つの場合を区別するのは
ムリだろ。入り口が有限状態オートマトンの1状態にしか
対応させられないから1桁とるべき場合か2桁取るべき場合
かの情報の持ちようがない。

168:デフォルトの名無しさん
10/04/27 19:32:05
>>161
(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)

169:デフォルトの名無しさん
10/04/27 19:33:09
すまん間違えた

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)

170:168=169
10/04/27 19:34:30
二重に間違えてるし…吊ってくるorzorz

^(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)$

171:デフォルトの名無しさん
10/04/27 19:53:14
あー、^はいらないか
後ろが行末じゃない場合にも対応するならこうかな

(\d{4})0?([1-9]?\d?(?=\d{2}))0?([1-9]?\d?)(?!\d)

172:デフォルトの名無しさん
10/04/27 20:17:03
正規表現一本でなんでもかんでもやろうとするのって
PerlやRubyで一行野郎と変わらない阿呆だな

173:デフォルトの名無しさん
10/04/27 21:01:58

偉いなあお前は
優れたツール使って頑張ってな

174:デフォルトの名無しさん
10/04/27 21:33:41
レベル低いな

175:デフォルトの名無しさん
10/04/27 22:34:36
>>172
正規表現一本も読めない奴が、このスレで何してんの?

176:デフォルトの名無しさん
10/04/27 23:27:25

優秀なんだな君は
俺はワイルドカードも使えないが正規表現で頑張ってね


177:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/28 00:32:33
>>177
なつかしすw

179:デフォルトの名無しさん
10/04/28 07:42:31
(a + b)(a - b) = b(a - b)
a + b = b

0でわるな

180:デフォルトの名無しさん
10/04/28 08:49:34
>>177
a=42
b=-22のとき

181:デフォルトの名無しさん
10/04/28 12:26:37
JavaScriptです

「xxxx=任意&yyyyyyy=任意&zzzzzz=任意」
と言う文字列から任意の値を各々取るにはどうしたらいいでしょうか?
xyzの文字は各々固定で、任意には何文字入るかわかりません
0文字もあります

欲しい結果は3つ
xxxx=任意
yyyyyyy=任意
zzzzzz=任意

182:181
10/04/28 13:42:54
自己解決
sage忘れすまん

183:デフォルトの名無しさん
10/04/28 15:30:15
教わっといて自己解決かよw

184:181
10/04/28 15:46:38
>>183
いや、JavaScriptスレでもマルチしたけど
結局、正規表現ではダメだったのよ

まぁ…すいませんでしたw
勉強します

185:デフォルトの名無しさん
10/04/28 21:22:49
●正規表現の使用環境 Perl5
●検索か置換か?  置換
●説明
行の最後が > じゃない行(改行コードだけの行も含む)の
改行コード を 改行コード<br>にしたい
改行コードは \n \r \r\n どれでもできるようにしたい
●対象データ
<p>あいうえお</p>
かきくけこ
<p>たちつてと</p>
●希望する結果
<p>あいうえお</p>
かきくけこ<br>
<p>たちつてと</p>

186:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/29 02:04:27
>>186
ありがとうございます。
これをよく見て勉強します。

188:デフォルトの名無しさん
10/04/29 18:11:51
>>187
こういう解法もある

s/(.)(\r\n|\n)/$1 eq '>' ? "$1$2" : "$1<br>$2"/sge;

eオプションが使えると色々応用が効くよ

189:デフォルトの名無しさん
10/04/30 00:25:13
Perlならね。

190:デフォルトの名無しさん
10/04/30 02:26:32
ありがとうございます。
これをよく見て勉強します。

頑張ってください


191:デフォルトの名無しさん
10/04/30 09:40:13
sge-

192:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/02 10:06:13
正規表現 欲張り

194:デフォルトの名無しさん
10/05/02 13:36:16
{A},{B}
という文字列に下記正規表現はマッチすると思うのですが
\{(.+)\} *, * \{(.+)\}
マッチしません。どこがまずいのですか?

195:デフォルトの名無しさん
10/05/02 13:44:04
\{(.+)\} *, *\{(.+)\}

196:デフォルトの名無しさん
10/05/02 13:46:07
>>195
ありがとうございます。
スペースが入っていましたねw
気づきませんでした。

197:デフォルトの名無しさん
10/05/02 23:31:14
(V)o¥o(V)

198:デフォルトの名無しさん
10/05/03 18:24:33
そりゃ工業高校なんかで最低限の技能をなにか一つ身に付けてる奴なら年齢が最強の武器になるよ
何となく大学院まで行ったような学生よりよっぽど将来有望だ
でも3年間何もせずただ学校に通ってただけってんじゃ駄目だろ
何もしてないどころか勉強ばっかりやって3年間無駄に歳だけ喰って
社会じゃ役に立たない能書きだけ一人前になってたんじゃしょうがないだろ
だから普通科の高卒は中卒以下だって言ってんだよ

199:デフォルトの名無しさん
10/05/05 22:01:58
前に、このすれで、()の中身を配列に入れていく正規表現があった。
(())でも、それぞれの中身を入れていく優れものだった。
あれの発展版で、文章(文章2(文章3)文章4)文章5(文章6(文章7)文章8)文章9
のそれぞれの文章を配列に入れれる正規表現はできないものだろうか?

200:デフォルトの名無しさん
10/05/05 22:25:37
日本語でおk

201:デフォルトの名無しさん
10/05/05 22:34:50
>>199
その正規表現って
((o)(o))ってあってもちゃんと乳首取れる?

ていうか言語クラス違うくね?できるもんなのか。

202:デフォルトの名無しさん
10/05/05 22:35:51
近所が自転車盗まれたても、相当離れてるけどジュース置いたら逮捕w
姉はそれでおっぱい触られたって。
これひどくね?友達の姉の実話な。

203:デフォルトの名無しさん
10/05/05 22:48:00
入れ子になってても順番にキャプチャできる
123456789 に対して 1(2(3)4)5(6(7)8)9 としたら
キャプチャ結果は 234, 3, 678, 7 になる
>>199が何を求めてるのかいまいちよくわからんが

204:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/06 12:35:18
>ていうか言語クラス違うくね?できるもんなのか。
日本語でOK。

206:デフォルトの名無しさん
10/05/06 15:17:54
>>205
正規表現であって、文脈自由文法じゃないけどできるものなの?
ってことだよ。俺の理解不足だったらすまないが。

207:デフォルトの名無しさん
10/05/06 15:47:52
>>204
たしかにネストなんか気にせずに'('と')'を区切り記号としてsplitするだけでいいな。
さすがロシア。

208:デフォルトの名無しさん
10/05/06 17:01:02
確かに、わざわざ正規表現で処理する内容じゃないなw

209:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/07 00:19:48
>>210
おお!出来ました。ありがとうございます。
正規表現はperlのが使えたんですね。これを機械に勉強してみます。

212:デフォルトの名無しさん
10/05/12 03:15:50
php 5.2です。

あるテキストファイル内の文字列から、''や""で囲まれた場所以外の半角スペースとタブを削除したいんですが(preg_replace?)、
どんな感じにすればいいんでしょうか?


213:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/15 19:39:38
>>213
NAME[\s ]?(?.+)\nEND

215:デフォルトの名無しさん
10/05/19 07:33:29
いい加減な回答だなw

216:デフォルトの名無しさん
10/05/19 22:29:45
正規表現で、"あ(い(う)え(おか)き)くけ" から一番外側の()の中身を取得するにはどうすればよいですか?


217:デフォルトの名無しさん
10/05/19 22:33:54
言語による

218:デフォルトの名無しさん
10/05/19 22:38:27
\1

219:デフォルトの名無しさん
10/05/20 22:14:10
●正規表現の使用環境 Perl5
●検索か置換か? 検索
●説明
りんごにマッチする文字列を検索。
青りんごは対象外としたい。

●対象データ
1,いちご、青りんご、みかん
2,いちご、青りんご、りんご
3,いちご、りんご、みかん

●希望する結果
2と3がマッチ

お願いします


220:デフォルトの名無しさん
10/05/21 00:45:52
(?<!青)(りんご)

221:デフォルトの名無しさん
10/05/21 01:46:36
>>219
/\bりんご\b/

222:デフォルトの名無しさん
10/05/21 02:16:16
>>220
りんごの括弧はいらないだろ。

>>221
蜜りんごは?ねぇ、俺の大好きな蜜りんごは?

223:デフォルトの名無しさん
10/05/21 05:39:03
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)

224:デフォルトの名無しさん
10/05/21 07:53:34
>>220-221
ありがとうございます。


225:デフォルトの名無しさん
10/05/21 09:08:55
★青葉りんご彡☆

226:デフォルトの名無しさん
10/05/21 19:33:34
Javaで鬼車使うには、ランタイムを再コンパイルするしかないの?


227:デフォルトの名無しさん
10/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
10/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
10/05/22 01:06:01
実際には、Webサイトにある更新日 (Update:2010/04/30) という
文字の色を変えるのに使いたいです。※更新”されていない”ものは赤で表示。

TCP Monitor Plus (OGA'sさんのサイト)
URLリンク(hp.vector.co.jp)

//バージョン更新チェック
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
10/05/22 01:07:27
説明が下手ですみません。

変数の値に直接エスケープ文字を入れたくないという事です。

よろしくお願いします。

231:デフォルトの名無しさん
10/05/22 01:23:34
>>230
本文読んでないけど、メタ文字をエスケープ出来れば済むのならjavascript quotemetaでぐぐるんだ

232:277
10/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:デフォルトの名無しさん
10/05/28 22:43:12
グローバルフラグを付けなくてもいいようなケースにもグローバルフラグを付けた場合
どれだけ無駄になりますか?とてつもなく無駄ですか?微々たるものですか?

234:デフォルトの名無しさん
10/05/28 22:52:06
検索対象の文字列長による。
グローバルフラグをつけさえしなければ、
最初のマッチング位置以降の文字列は読み込まないので。

ただし、検索対象の文字列の中にマッチングする対象が無い場合は
グローバルフラグをつけた場合と同じぐらいコストがかさむ。

もう作っちゃったなら、性能問題出てから考えたら。

235:デフォルトの名無しさん
10/05/28 22:55:32
>>234
どうもありがとうございます。特に何も感じなかったら気にしないことにします

236:デフォルトの名無しさん
10/05/29 02:17:39
●正規表現の使用環境
C# 3.0

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい
{ と } に囲まれた文字列を検索したい

●対象データ
Memo[0]{
[Text] 対象データ
}

●希望する結果
[Text] 対象データ


よろしくお願いします

237:デフォルトの名無しさん
10/05/30 10:50:00
>>216
亀レスだけど、
\(.*\)
で最長一致検索すれば、一番外側の()である
(い(う)え(おか)き)
にマッチする


ちなみに、\(.*?\)で最短一致検索すれば
"(い(う)"と"(おか)"の2箇所にマッチする


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch