正規表現 Part7at TECH
正規表現 Part7 - 暇つぶし2ch183:デフォルトの名無しさん
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