正規表現 part4at TECH
正規表現 part4 - 暇つぶし2ch200:デフォルトの名無しさん
07/10/07 01:56:00
>>196
まず、[あば,ばばば] を うんこっこー に痴漢する
(うんこっこー に痴漢した文字列は堆肥しておく)

うんこっこー, あばばばば, あば, うんこっこー
となるので、これを分割する。そのあと、
うんこっこー を堆肥しておいた文字列に戻す。

201:デフォルトの名無しさん
07/10/07 04:37:56
逆に、 "," をうんこっこーに置換しても良いかもね。
Perl ですまんけどこんな感じで。

$str =~ s/(\[[^]]+\]|[^,]+)(?:(,\s*)|$)/\1うんこっこー/g;
$ary = split(/うんこっこー/, $str);

202:デフォルトの名無しさん
07/10/07 12:19:13
Perl 5.8.8を使っています。
文字列の先頭からある文字列(たとえばXYZ)の直前までを削除する、
ただしその文字列XYZがこない場合はすべてを削除する正規表現は
どう記述したらよいでしょうか。

たとえば
(1) abcXYdefXYZ123 なら abcXYdef のみを削除する
(2) abcXYdef なら abcXYdef すべてを削除する
ということです。
s/^.*(XYZ)?/$1/; とすると(1),(2)ともすべてが削除されてしまい、
s/^.*?(XYZ)?/$1/; とすると(1),(2)とも1文字も削除されません。

s/^.*?XYZ// || s/^.*//;
とすれば(1),(2)ともうまくいきますが、
できれば1個の正規表現で実現させたいです。

203:デフォルトの名無しさん
07/10/07 13:02:54
s/^abcXYdef//;

204:デフォルトの名無しさん
07/10/07 13:19:38
ちゃんと動くんなら、自分の能力で到達可能な範囲のプログラムで十分だと思うよw

s/^((?!XYZ).)*//

205:デフォルトの名無しさん
07/10/07 13:27:33
s/(^.*?XYZ|^.*)//;

206:デフォルトの名無しさん
07/10/07 13:30:59
s/^.*?XYZ|^.*//;

207:デフォルトの名無しさん
07/10/07 13:32:25
> s/^.*?XYZ// || s/^.*//;
> とすれば(1),(2)ともうまくいきますが、

ウソつけ!

208:202
07/10/07 15:49:43
短時間にたくさんのレスが!ありがとうございます。
>>204
(?!pattern) が使えるんじゃないかと思って
質問前にPerlのマニュアルを読んだんですがうまくいきませんでした。
なるほど、こうすればうまくいくんですね。

>>207
s/^.*?XYZ/XYZ/ || s/^.*//; の間違いでした。失礼しました。

>>205-206
ということで、元の質問が間違ってたので間違いです。
試行錯誤の末、 s/^(.*(?=XYZ)|.*)//; という別解を見つけました。


209:デフォルトの名無しさん
07/10/07 20:10:50
PHP5のpreg_matchで、
涼子、愛、美姫以外の文字列が来た場合を検知したいんですが。

涼子、愛、美姫のどれかを検知する場合、
pattern = '/涼子|愛|美姫/';
ですが、涼子、愛、美姫以外を検知するにはどう書いたらいいですか?


210:デフォルトの名無しさん
07/10/07 20:13:06
そのパターンにマッチしないことを確認すればよい。

211:209
07/10/07 20:21:07
>>210
すみません。
涼子、愛、美姫以外を含む文字列です。

たとえば、涼子愛子美紀が来たばあい、
「子」が紛れ込んでることを検知したいのですが。

212:209
07/10/07 20:36:57
>>211
'/^涼子|^愛|^美姫/';


213:209
07/10/07 20:38:53
>>212
すみません。途中でした。
'/^涼子|^愛|^美姫/';
だと涼子、愛、美紀も全部ひっかかってしまいます。
それだけを含んで、それ以外の文字列を全然含まないようにしたいのですが。


214:デフォルトの名無しさん
07/10/07 20:55:01
同じくphp5のpreg_matchですが、
半角または全角の数字から始まるはどう書きますか?

215:デフォルトの名無しさん
07/10/07 21:39:55
>>213
/^(?:涼子|愛|美姫)*$/ とか?

216:デフォルトの名無しさん
07/10/07 21:40:46
>>214
/^(?:\d|1|2|3|4|5|6|7|8|9|0)/ とか?

217:デフォルトの名無しさん
07/10/08 00:15:19
$string = '涼子愛子美紀';
$result = preg_replace( '/涼子|愛|美姫/', '', $string);
echo 'おまんこ';


218:デフォルトの名無しさん
07/10/08 13:51:27
>>215-216
ありがとうございました。

>>217
氏ね!

219:デフォルトの名無しさん
07/10/08 17:38:51
NFAを機械的にDFAに変換する方法を教えてください。

220:デフォルトの名無しさん
07/10/08 20:14:07
そんなもん無い!


って答えでFA?

221:ヽ・´∀`・,,)っ━━━━━━┓
07/10/19 03:35:03
Aho-Corasick改とかでいいと思うが。

222:デフォルトの名無しさん
07/10/25 17:50:49
phpなんですが、URLリンク(*.example.*)にマッチさせたいと思ってます。
2つめの*の部分で、comやjp等にマッチさせたいのですが、
http:\/\/(.+\.)?example\..+/では、
URLリンク(www.example.hoge.com)なんかもマッチしてしまいます。
http:\/\/(+\.)?example\.(com|jp)/とかにすると、
新しいドメインがでてきたときに対応できません。
何かよい方法ありませんでしょうか?

223:デフォルトの名無しさん
07/10/25 18:33:14
>>222
「新しいドメイン」ってのはどんなところまでを想定してる?

224:デフォルトの名無しさん
07/10/25 18:49:54
簡易なのでよければ \..+ じゃなくて \.[^/.]+ にするとか

225:デフォルトの名無しさん
07/10/25 19:51:52
http:\/\/(+\.)?example\.[^.]+\/

226:デフォルトの名無しさん
07/10/27 16:43:32
/\/\/\/\/\//\/\/\/\/\/\/\FUCKINTOSH?_*+*}+}`+`%$W`}!LT`LA<VR`AKVAREGERGA"#%IW$%U&'I<{)'(<O'T(*O>


最近、こうして何の作意もなく打ったものが正則表現に見えてどうしようもない


227:デフォルトの名無しさん
07/11/08 00:14:41
最初と最後は"/"であり、
その間に"/../"や"/./"が発生しない文字列を
正規表現では記述できますか?

[×]
/etc/../usr/./local/
/../
/./

[○]
/etc/sysconfig/
/abc/.aaaa/

228:デフォルトの名無しさん
07/11/08 05:41:48
>>227
正規表現で一気に行うんじゃなくて、
"/" で分割して、各パーツがドットだけで構成されていたらハネる、とか
(ディレクトリトラバーサル対策ならよく調べたほうがいいかも)

229:デフォルトの名無しさん
07/11/08 08:45:57
ありがとうございます。
xmlのxsd:patternで書きたかったのですが、だめそうです。考え直してみます。

230:デフォルトの名無しさん
07/11/08 13:40:57
>>227
これでどうかな。

^/(([^/.][^/]*|\.[^/.][^/]*|\.\.[^/]+)/)*$

汚染チェックに使うなら>>228の言うようにした方がいいな。

231:デフォルトの名無しさん
07/11/11 17:33:05
webでの絵文字表示に苦戦しているのですが、
BAD+[SJISコード]を正規表現で表すにはどう書いたらいいですか?

232:デフォルトの名無しさん
07/11/11 17:34:32
書き忘れていました。言語はPHPで、バージョンは4.4.1です。

233:デフォルトの名無しさん
07/11/11 23:06:58
ぐ・ぐ・れ

234:デフォルトの名無しさん
07/11/11 23:47:19
うん、ググれば全て解決するからこのスレ潰すべきだね。

235:デフォルトの名無しさん
07/11/11 23:52:31
aho

236:デフォルトの名無しさん
07/11/12 00:15:22
ワロタwwwwwww

237:デフォルトの名無しさん
07/11/12 01:18:32
いや、ググって該当するページを見たんですけど、正規表現の構成の仕方がわからなくて、
ここに書き込みました。
調べるだけ調べたんですけど、やはりだめでしょうか

238:デフォルトの名無しさん
07/11/12 01:42:05
だめです

239:デフォルトの名無しさん
07/11/12 04:32:21
なんだこいつら 本当はできないんじゃねーの?

240:デフォルトの名無しさん
07/11/12 09:32:04
>>239
お、やっと気づいたようだね。それじゃあバイバーイ!

241:デフォルトの名無しさん
07/11/12 19:50:58
質問です。正規表現でconsumeするというのは日本語でいうとどういうことですか?

242:デフォルトの名無しさん
07/11/12 19:59:53
文字を消費するということ。

243:241
07/11/12 21:10:47
>>242
ありがとうございます。「文字を消費する」とはどういうことでしょうか?
イメージが湧きません。

244:デフォルトの名無しさん
07/11/12 22:24:56
正規表現 /..c/ を "abc" にマッチさせたときを考えると、
最初の /./ は "a" にマッチして消費する。
すると、なんと言うかテキストエディタのカーソルが一つ進むのをイメージしてくれたらよいか、
二個目の /./ が "b" にマッチできるようになる。

245:デフォルトの名無しさん
07/11/12 22:30:07
テキストエディタの ed ってのが元になってるからね。
カーソルって例えはナイス!

246:241
07/11/12 23:16:33
>>244
なるほど、よくわかりました。ありがとうございます。

247:デフォルトの名無しさん
07/11/15 07:57:08
おはようございます。このスレの過去ログってネットにありますか?

248:デフォルトの名無しさん
07/11/15 16:55:18
あります。

249:デフォルトの名無しさん
07/11/15 20:14:33
アキュムレータの0ビット目って左端?それとも右端?

250:デフォルトの名無しさん
07/11/16 00:58:31
>>249
スレ違い。

251:デフォルトの名無しさん
07/11/16 23:29:30
>>249


252:デフォルトの名無しさん
07/11/17 01:06:19
perl互換のFlexible Renamerで置換したいのですが。
(hoge)hoge(hoge).txtを(hoge) hoge(hoge).txtとしたい場合はどう書けばいいのでしょうか。
)の直後にスペースを入れ、拡張子前の)の直後には入れたくないんです。

253:デフォルトの名無しさん
07/11/17 01:30:29
")" -> ") "
" ." -> "."

254:デフォルトの名無しさん
07/11/17 01:34:08
>>253
なるほど。2回やるという手が・・・。ありがとうございました。

255:デフォルトの名無しさん
07/11/17 09:27:48
リネーマの仕様によるけど、Perl互換なら
"^(\([^)]*\))" -> "$1 "
"^(\([^)]*\))(.*)" -> "$1 $2"
とか。いずれにしても調整が必要

256:デフォルトの名無しさん
07/11/18 19:15:56
vb.netで
「// xxxxx EXEC ~」で始まり、
「// xxxxx EXEC ~」で始まる1行前までを
1グループで取得したいと考えています

(?ims:(^\/\/+\s+EXEC+.+))
だとまるまる取得してしまうのはわかるのですが、
これを上記の様に取得するにはどう書けばよいのでしょうか?

ご教授よろしくお願いいたします。


257:デフォルトの名無しさん
07/11/18 20:18:03
split

258:デフォルトの名無しさん
07/11/19 02:39:09
>>256
なんでスラッシュをエスケープしてんだよw

.NET の正規表現なら可変長の戻り読みが使えたと思うから、
その始まりのしるしと終端のしるしを戻り読みの部分と先読みの部分に置けば?

.NETで可変長の戻り読みができなかったらすまんw


259:デフォルトの名無しさん
07/11/22 22:35:09
数値比較をしたいのですが、0x021a4 っていくつなのでしょうか?

260:デフォルトの名無しさん
07/11/22 23:13:20
2 * 16^3 + 1 * 16^2 + 10 * 16^1 + 4 * 16^0

261:デフォルトの名無しさん
07/11/22 23:17:32
>>259
電卓開く

関数電卓モードにする

16進モードにする

21a4と打つ

10進モードにする

正規表現の話じゃねーし

262:デフォルトの名無しさん
07/11/23 01:54:14
URLリンク(www.google.co.jp)

263:デフォルトの名無しさん
07/11/23 01:58:02
URLリンク(www.google.co.jp)
これでおk

264:デフォルトの名無しさん
07/11/23 02:44:38
16進数知らないプログラマがいるのか・・・時代は変わったな。

265:デフォルトの名無しさん
07/11/23 02:46:28
プログラマじゃないから

266:デフォルトの名無しさん
07/11/23 08:04:03
具体的には秀丸エディタで置換を行いたいのですが、こうするには…
--------------
[12:34:56] 発言者1:
文章2
文章3
[12:34:56] 発言者2:
文章4



[12:34:56] 発言者1:
文章2
文章3

[12:34:56] 発言者2:
文章4

--------------
どうしたら良いのでしょうか?(文章の中に [ ] が含まれる可能性は無いものとして単純に)
\n[ と記述すると、正規表現の括弧の対応が合ってないとか怒られてしまいます。

非常に初心者な質問ですいません。

267:デフォルトの名無しさん
07/11/23 09:26:00
エスケープ

268:デフォルトの名無しさん
07/11/23 11:43:08
regexre
FrameworkFrame

などといったような「同じ文字列とそれに挟まれた別な文字列」を取り出したいのですが、
どういう文を書いたら実現できますか?
PHPのpreg_replaceで使用します。
よろしくお願いします。

269:デフォルトの名無しさん
07/11/23 12:00:17
re(.*)re でいけると思うけど。
以下はJScriptだけどこれくらいなら読み取れるよね?

var keyword = "re";
var pattern = keyword + "(.*)" + keyword;
var objReg = new RegExp(pattern);

"regexre".match(pattern);
WScript.StdOut.WriteLine(RegExp.$1);
"rere".match(pattern);
WScript.StdOut.WriteLine(RegExp.$1);
"regexregex".match(pattern);
WScript.StdOut.WriteLine(RegExp.$1);

270:デフォルトの名無しさん
07/11/23 12:50:33
Ruby なら (.+)(.+)\1 で $2 を取ればいけるけど、
PHP でいけるかどうかは知らん

271:デフォルトの名無しさん
07/11/23 12:53:54
>>269
日本語読解力に大きく欠けますな

272:デフォルトの名無しさん
07/11/23 13:00:21
eregexreならrが取れるはずだからつかいものになるのか?

273:デフォルトの名無しさん
07/11/23 13:05:34
eregexre なら regexr が取れる。
最長一致だから。
これが目的の物かはともかくとして。

274:デフォルトの名無しさん
07/11/23 13:51:50
>>269
すみません、説明不足でした。
同じ文字列というのも未知なのです。

>>270.
ありがとうございます。
Rubyならいける、というのは期待が持てました。
早速調べてみます。

>>272-273
ここも説明不足でした。
「同じ文字列とそれに挟まれた別な文字列」の全てを取得したいです。
つまりThisIsThePenという文字列からThisIsTh(とePe)を取得できるようにしたいのです。

275:デフォルトの名無しさん
07/11/23 13:56:24
sIs は要らないの?

276:デフォルトの名無しさん
07/11/23 14:00:51
sIs が必要ないならとりあえず Ruby ではこうなる。
PHP でいk(ry

'ThisIsThePen'.scan(/((.+).+\2)/) { puts($1) }

277:デフォルトの名無しさん
07/11/23 19:31:22
文字列 [全ての文字] を 正規表現 [[]([^\]]+)] で 全ての文字 を取り出すことができますが、 文字列 {全ての文字} で 全ての文字 を取り出す正規表現を教えてください。


278:デフォルトの名無しさん
07/11/23 19:42:51
日本語でおk

279:デフォルトの名無しさん
07/11/23 19:46:56
\{([^\}]+)\}

280:デフォルトの名無しさん
07/11/24 08:40:39
ありがとう。
すごいね
正規表現分かる人尊敬するわ

281:デフォルトの名無しさん
07/11/24 09:46:49
別に大した事じゃない。
すげーとか思って思考停止してるから理解できないだけ。

282:デフォルトの名無しさん
07/11/24 09:48:41
分かりました。
私も頑張って勉強します

283:デフォルトの名無しさん
07/11/24 10:09:17
よし! その意気だ!

284:デフォルトの名無しさん
07/11/24 11:18:23
ホモビデオからお前ら。

285:デフォルトの名無しさん
07/11/25 17:53:21
なんでホモなの?
私は女性です

286:デフォルトの名無しさん
07/11/25 19:20:34
性同一性障害か

287:デフォルトの名無しさん
07/11/25 20:30:25
性器表現

288:デフォルトの名無しさん
07/11/25 20:32:19
モザイクのことか

289:デフォルトの名無しさん
07/11/26 00:01:46
>>285
ホモセクシュアルは同性愛って意味だよ
当然、女性同士でも使う

290:デフォルトの名無しさん
07/11/26 12:46:15
ここにいる奴らは全員例外なくホモ



















サピエンス

291:デフォルトの名無しさん
07/11/26 15:19:45
ホモ牛乳という名前にはかなりインパクトがあると思うんだ

292:デフォルトの名無しさん
07/11/26 15:26:00
「ホモゲナイズド牛乳」じゃ長すぎるべ。

293:デフォルトの名無しさん
07/11/26 18:38:03
ホモジニアス・マルチコアを略してホモコア呼べ

294:デフォルトの名無しさん
07/11/27 08:45:29
みんな頭おかしいのですね。
残念です

295:デフォルトの名無しさん
07/11/27 11:39:19
HTMLに含まれる CSSの
class="***" や id="**" , aタグの target="***" を削除したいんですが、観よう見真似でやったのですが
マッチしてくれません。どなたか..

(id|class|target|title|style|name)=[\+\$\;\?\.\W\w%,!#~*/:@&=_-]+?

PC用に吐き出されたデータを、携帯用に変換したくて..

296:デフォルトの名無しさん
07/11/27 11:56:07
target="[^"]*"

297:デフォルトの名無しさん
07/11/29 17:43:52
HTMLのコメントを取得するにはどうしたら良いでしょうか?
<!--[^-->]*-->
で試したのですが[^-->]だと各文字を含まないとなってしまうのでだめでした。
文字列を含まないって表現方法がわかりません。
お手数ですがよろしくお願いします。

298:デフォルトの名無しさん
07/11/29 18:01:50
>>297
貪欲でないマッチ

299:デフォルトの名無しさん
07/11/29 18:35:11
>>297
html パーサ使え

300:297
07/11/29 19:51:50
>>298
ありがとうございます。
貪欲でないマッチでググッた所無事解決しました。

>>299
プログラム内で使いたかったので、
パーサを使うとhtml記述ミスなどがあった場合に面倒なので正規表現を使う事にしました。


301:デフォルトの名無しさん
07/11/29 23:53:17
>>299
アホ

302:デフォルトの名無しさん
07/12/02 03:37:22
bregexp.dllを使って
<th>ほげほげ<br/>ほげほげ</th>
のような<th>で囲まれた内部の<br/>だけ削除したいのですが、
<br/>の数が不定で困ってます。どう書けばよいのでしょう?

303:デフォルトの名無しさん
07/12/02 17:04:43
>>302
html パーサ使え

304:デフォルトの名無しさん
07/12/03 18:49:06
正規表現でand検索したいのですが
どのようにすればいいのですか?
正規表現: Win.*Mac.*Linux.*Sun
上記のようにやると、順番が固定されてしまいます。
どのような順番でもいいので4つ入っていれば
ヒットさせたいのです。


305:デフォルトの名無しさん
07/12/03 19:19:07
>>304
肯定戻り読み

306:デフォルトの名無しさん
07/12/03 21:22:52
(?=.*Win)(?=.*Mac)(?=.*Linux)(?=.*Sun).*

307:デフォルトの名無しさん
07/12/03 23:37:29
NHKのFMの番組の曲の時間表示(全角の数字と '分'と'秒'から成る文字列で
末尾は必ず '秒' )を一気に半角数字と「分⇒m」「秒⇒s」のように一気に置換
する方法がありますか? 全角数字でも '2007年' のような文字列はそのま
まにしたいのです。
【例】
'6分08秒' ⇒ 6m08s


308:デフォルトの名無しさん
07/12/04 00:20:03
tr/時分秒/hms/

309:デフォルトの名無しさん
07/12/04 09:06:00
>全角数字でも '2007年' のような文字列はそのままにしたい

のなら

>【例】
>'6分08秒' ⇒ 6m08s



'6分08秒' ⇒ 6m08s

ならないといけないの?

それとも【例】のようにして欲しいの?


310:デフォルトの名無しさん
07/12/04 21:11:44
正規表現処理系一般の話なら文字変換はダメだなあ

311:デフォルトの名無しさん
07/12/04 21:38:52
tr/時分秒[0-9]/hms[0-9]/


312:デフォルトの名無しさん
07/12/04 21:39:27
trはスレ違いだろ

313:デフォルトの名無しさん
07/12/05 00:33:46
>>309は日本語が読めないのだろうか?


314:デフォルトの名無しさん
07/12/05 18:08:23
>>305-306 できました。ありがとうございます。

315:デフォルトの名無しさん
07/12/05 19:45:45
URL が多数含まれる文章があるとき、その URL にマッチさせる正規表現を知りたいです。
マッチさせるのは “http://~/” の部分で充分でして、それだけなら http:\/\/[^\/]+\/ でイケそうです。
ただ今回やりたいのは、特定のドメイン(というかサーバ)の URL はマッチさせない、ということです。
たとえば URLリンク(www.google.co.jp) にはマッチさせたくない、ということです。
これはどんな書き方になるでしょうか?
Perl な正規表現だと具合いいです。

316:デフォルトの名無しさん
07/12/06 06:31:42
>315

>2

317:デフォルトの名無しさん
07/12/07 07:08:24
フリーでとにかく早いのってどれ?
秀丸のやつ?鬼車?

318:デフォルトの名無しさん
07/12/07 23:18:36
秀丸は速くない。

319:デフォルトの名無しさん
07/12/08 14:11:45
>>317
秀丸のは確かに速い

速いけど、他で出来て秀丸で出来ない表現が多いし
それを無理やり秀丸で表現すると結局遅くなることも多い

320:デフォルトの名無しさん
07/12/08 23:27:27
[0-1]?[0-9]
これで2桁目に0か1が付くか付かないか
という表現になりますか?

321:デフォルトの名無しさん
07/12/08 23:32:07
日本語でおk
それだと、0~9 と 00~19 にマッチ

322:デフォルトの名無しさん
07/12/08 23:38:08
すみませんここで聞いて良い事なのか解らないのですが、よければお教えください。
C/Migemo 1.2 リリース版 for Windowsに付属の辞書を読み込ませhoをmigemo_queryしてみたことろ
([ホ☆★ほ逋捕縫豊B萠萌]|ho|Ho)と、なぜかBが含まれた文字列がかえってきました。
この文字列を利用して検索をすると当たり前ながらBに反応してしまうのです。
そこで質問なのですが、どうしてBが含まれるのでしょうか?
もしかして私の使い方が間違っているのでしょうか?

323:320
07/12/09 00:14:35
>>321
すいません、それが言いたかった
ありがとう

324:デフォルトの名無しさん
07/12/09 00:33:23
>>323
「すみません」だろ
日本から出て行けよ

325:デフォルトの名無しさん
07/12/09 00:50:18
こらこら

326:デフォルトの名無しさん
07/12/09 01:08:50
>>322
完全にスレ違いな気がするが、どこが適切か知らないので一応答えておくと、
ホウ素の元素記号がBだから。他にはsaで酸素のOが引っかかったりするはず。

327:デフォルトの名無しさん
07/12/09 01:41:55
>>326
おおおおおおお!
なるほど…
おかげで謎が解けました
ありがとうございました。

328:デフォルトの名無しさん
07/12/18 00:38:45
ひゃ[あぁ゛]*うまひ[いぃ゛]*

329:デフォルトの名無しさん
07/12/18 01:09:55
ひゃうまひ゛

330:デフォルトの名無しさん
07/12/18 04:59:57
ひゃ゛゛゛゛゛うまひ゛゛゛゛゛゛゛

331:デフォルトの名無しさん
07/12/18 12:24:04
/image/[00-31]_[00-1f].jpg
     ↑00~31↑00~1f(16進数)
正規表現でこのように設定したいのですがうまくいきません。

/image/(00_00、01_01・・・10_0a・・・31_1f)
こういったものを書きたいのですが可能でしょうか?

332:デフォルトの名無しさん
07/12/18 12:29:21
>>331
[] は一文字にしかマッチしないのでー。
正規表現はふつうは数値の範囲は指定できないのでー。

([0-2][0-9a-f]|30|31)_[01][0-9a-f]\.jpg


333:デフォルトの名無しさん
07/12/18 13:19:37
>>331
もしかして、 10進部分と 16進部分を対応させたいと思ってる?
それだと正規表現だけでは簡単に書けないと思う。

334:デフォルトの名無しさん
08/01/05 11:31:41
日本語の話しになってしまいますが、質問させてください。

>検索対象に正規表現が一致した場合

>検索対象が正規表現に一致した場合
どっちが正しいのでしょう?

前者が正しいような気がするのですが、よく判らなくなってきました

335:デフォルトの名無しさん
08/01/05 12:04:31
一致というよりマッチといいましょう。

336:デフォルトの名無しさん
08/01/05 17:24:34
そういえばどっちも言うような気がする。
文脈によるというかどっちを軸に語るかによるんじゃないかな。

337:デフォルトの名無しさん
08/01/05 17:36:47
厳密に言うと受理だろうが、気にしすぎだとも思う

338:デフォルトの名無しさん
08/01/05 21:41:39
プログラムの 「前」 ってどっちですか?

339:デフォルトの名無しさん
08/01/05 21:42:19
つまらんコピペだな

340:デフォルトの名無しさん
08/01/05 21:45:36
じゃね? => ぢゃね?

341:デフォルトの名無しさん
08/01/06 14:50:28
ここのFAQの中の手作業でNFAを作成ってページなんだけど
URLリンク(capslockabcjp.kitunebi.com)
/***/にマッチしないきがするけど。

342:デフォルトの名無しさん
08/01/06 15:05:50
だからなんだよ。

343:デフォルトの名無しさん
08/01/06 15:29:12



344:334
08/01/06 15:59:55
レス有難うございます。やっぱり気にし過ぎですかね。
気にしない事にします。

345:デフォルトの名無しさん
08/01/06 23:17:00
if (ch == '/') st = 1;
else if (ch == '*') st = 4; // 追加
図のほうに
S4->S4 [label="*"];
だね

346:デフォルトの名無しさん
08/01/07 00:05:54
>検索対象(の文字列)が正規表現(で表されたパターン)にマッチした場合
パターンは固定だから、俺はこっちがしっくりくる

347:デフォルトの名無しさん
08/01/10 03:38:22
"one two three four"
"one three two four"
にしたいのです。正規表現でスワップ(位置交換)したいんですが
ググってもあんまりなかったです。

一応、java.util.regex.*; 使ってます。

348:デフォルトの名無しさん
08/01/10 03:41:41
"one two three four five" 
"one four three two five" 
1 2 3 4 5
1 4 3 2 5
でした。

349:デフォルトの名無しさん
08/01/10 16:36:35
Pattern pattern = Pattern.compile("^(.*?)\\s+(.*?)\\s+(.*?)\\s+(.*?)\\s+(.*?)$");
Matcher matcher = pattern.matcher("one two three four five");
String str = matcher.replaceFirst("$1 $4 $3 $2 $5");

とりあえず

350:デフォルトの名無しさん
08/01/10 17:42:18
>>349
おお、ありがとうございます。
java.util.regex.Pattern; のAPI見ても \1 は載っていても、$1 は載ってなかったんですができるんですね。

ところでAPI(java, perl, ruby, js)見ても良く分かり辛いのですが、\n, $n のnはいくつまで参照できるんでしょうか。

nは10進表記みたいですけど、
\0
- 1から9までは dec
\1 ... \9
- dec
\10, \11 ... \21
- oct
\010, \011 ... \025

\0nnn とすれば自動で8進表記
\nnnn とすれば自動で10進表記

参照は \1 <=> $1

API(java)ではこういう感じみたいなんですけど実際はどうなんでしょうか。

351:デフォルトの名無しさん
08/01/10 21:27:54
"\1" じゃなく、"\\1" じゃないのかな。

java コンパイル ⇒ 正規表現コンパイル
つまり2回コンパイルされる事に注意。
ここらへんの理屈がわかってないとツライよ。

352:349
08/01/11 00:55:38
>>350
とりあえず最大数は気にしなくていい、[\$]1000とかでもいけるように見える
Petternクラスでは0始まりは8進数になるけど、Matcherクラスでは10進のまま
PetternのescapeとMatcherのappendReplacementあたりのソースを見るといい
うまくまとめられてないけど、2ch止まるらしいので今のうちに書いとく

353:デフォルトの名無しさん
08/01/11 17:24:33
APIソース見てるんですか!
そこまで頑張らなくてもどこかにあるJavaのフォーラムで質問した方がいいんじゃないですか?


354:デフォルトの名無しさん
08/01/11 17:39:56
質問者よりも回答者の方が問題解決に躍起になってるスレ。

355:デフォルトの名無しさん
08/01/11 20:10:07
sedを使ってC言語のコメントを全て削除するにはどうやればいいんですか?
コメントが1行に収まっているなら簡単なんだけど、複数行にまたがる場合にどうすればいいかわからない

356:デフォルトの名無しさん
08/01/11 20:22:05
>>355
パターンスペースとホールドスペースを駆使すればできなくはないが、お勧めできない。
awkかperl、或いは最近のスクリプト言語を使う方がいい。

357:デフォルトの名無しさん
08/01/12 08:24:05
俺には無理ぽ
---------------------------------------
# decom.sed
/\/\*/ {
:loop
/\*\// { b break }
N
b loop
:break
s/\n/ /g
s/\/\*.*\*\///g
}
---------------------------------------

358:デフォルトの名無しさん
08/01/12 08:30:01
URLリンク(main.rtfiber.com.tw)
ちょろっと探したらすぐ見つかったしorz

359:デフォルトの名無しさん
08/01/12 09:21:03
でも>358だと文字列中の/*にも反応しちゃうんだよね。
本格的に使うのは、ちょっと無理。

360:デフォルトの名無しさん
08/01/12 09:51:59
プリプロセッサ指令をプリプロセスで消されないよう加工
 ↓
プリプロセッサにかける
 ↓
加工したプリプロセッサ指令を元に戻す

361:デフォルトの名無しさん
08/01/14 12:03:15
正規表現のエスケープしなくてもいい記号がわからないので、
とにかく記号という記号はエスケープしていて結構カオスになっているのですが、
エスケープしなくてもいい記号一覧とかどっかにありませんか?
!"#$%&'()-=^~\|@`[{;+:*]},<.>/?_
これが
\!\"\#\$\%\&\'\(\)\-\=\^\~\\\|\@\`\[\{\;\+\:\*\]\}\,\<\.\>\/\?\_
こんな感じに・・・

362:デフォルトの名無しさん
08/01/14 12:22:13
半角スペースって普通に半角スペースをいれるか\x20とかくかどっちがいいんですか?

363:デフォルトの名無しさん
08/01/14 12:23:19
普通に半角スペースを

364:デフォルトの名無しさん
08/01/14 12:40:39
>>363
レスありがとう。
普通に半角スペース使うことにしますね。

365:361
08/01/14 15:43:29
完全かどうかはわかりませんがWikipediaにのってました。
というわけで自己解決しました。

366:デフォルトの名無しさん
08/01/14 18:31:15
>362

\s


367:デフォルトの名無しさん
08/01/14 18:36:27
>>366
秀丸じゃ使えないんだよな

368:デフォルトの名無しさん
08/01/14 18:37:44
>>366
つーか、それホワイトスペース一般じゃないか?

369:デフォルトの名無しさん
08/01/14 18:55:23
ホワイトベースに見えた

370:デフォルトの名無しさん
08/01/14 19:43:17
セイラさんにハァハァしすぎw

371:デフォルトの名無しさん
08/01/14 20:00:29
\s は改行にもマッチすることがあるから
半角スペースの代わりにはならないよ

372:デフォルトの名無しさん
08/01/14 22:22:22
特定の英単語が含まれているかをチェックする正規表現を教えてください。
This is a pen.
に対してhisをチェックした場合に引っかからないのが正しいです。

英単語の定義は[A-Za-z]{3,}とする予定で、単語の間はカンマやハイフン、セミコロンなどもあり。
前後が[^A-Za-z]だけだと行頭行末がダメ。。。


373:デフォルトの名無しさん
08/01/14 22:23:48
>>372
\b

374:デフォルトの名無しさん
08/01/14 22:28:09
非語境界ってやつだな。

375:372
08/01/14 22:28:22
>>373
ありがとう。知らんかった。首吊ってくるわ。。。

376:デフォルトの名無しさん
08/01/14 22:41:54
イ㌔

377:デフォルトの名無しさん
08/01/14 22:44:30
\sはタブにもマッチするな
まあ既に>>368が言ってるけど

378:デフォルトの名無しさん
08/01/17 16:41:25
こんにちは。質問です。

@book{sagan:1954,
author = {Fran\c{c}ois Sagan},
title = {Bonjour Tristesse}
}

こんな感じの文字列(BibTeX)を取り込んでハッシュにするためには
どのような正規表現を用いればよいでしょうか。

ポイントは
 1. コンマで分割する。
 2. {}の中のコンマは無視する。
というあたりだと思うのですが、特に括弧の入れ子をどう処理するかで困っています。

使用言語はRubyです。よろしくお願いします。

379:デフォルトの名無しさん
08/01/17 19:22:45
正規表現は再帰をあつかえない。即ち括弧の対応を確かめることが出来ない。
上限をハードコードするなら可能ではあるが、普通にパーサを書いたほうがいいと思う。

380:デフォルトの名無しさん
08/01/17 21:31:48
新しいPerlへようこそ

381:デフォルトの名無しさん
08/01/18 13:21:50
>>380
新しい Perl でも、正規表現 *だけ* では無理じゃね?

382:デフォルトの名無しさん
08/01/18 19:34:46
ソースコードやXMLはネスト構造を持つから正規表現は向かないよな。
Javaとかもソースコードパーサー用の汎用クラスがあるけど、何故か使われなかったり。
BNF法の知識がデベロッパレベルで浸透してないから、無理も無いけど。

383:デフォルトの名無しさん
08/01/24 09:57:54
仕用言語はPHP5.2.4です。UTF-8での運用をしております。
テキストの中のURLをリンクしたいのですが、

$pat = "(https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep = "<a href=\"\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat, $rep ,$body);

これだと、2ちゃんねるみたく、ttp:から始まったURLの場合リンクできません。
無駄だと思いつつも書き方がわからないので、下記の処理を付け加えましたが、
 <a href="hoge">hoge</a>
↑この部分が何故か文字化けしてしまいます。

$pat2 = "[^h](ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep2 = "<a href=\"h\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);

スマートに書く方法を教えてください。

384:デフォルトの名無しさん
08/01/24 10:34:25
すまない
ageさして下さい

385:デフォルトの名無しさん
08/01/24 10:51:13
>>383
[^h] じゃなくて h? じゃない?

386:デフォルトの名無しさん
08/01/24 11:20:57
>>385
㌧です
ご指摘のように

$pat2 = "h?(ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)";
$rep2 = "<a href=\"h\\1\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);

こうすることで動きました
ありがとうございました

387:デフォルトの名無しさん
08/01/24 14:34:41
h?っていらなくない?

388:デフォルトの名無しさん
08/01/24 14:46:58
http: ってちゃんと書いたときに h が増殖しちゃわない?

389:388
08/01/24 14:51:28
スマソ、勘違い。

h? を省くと、 http: ってちゃんと書いたときに、こんなふうに h が出てきちゃう。
h<a href="URLリンク(hoge)<)</a>

390:デフォルトの名無しさん
08/01/24 21:19:55
全体を括弧でくくってそれをテキストに指定、
内側のh?(~~をリンクに指定すればいいと思う。

391:デフォルトの名無しさん
08/01/24 21:49:52
$test = '<a href="URLリンク(localhost)">LINK29</a>';
$test = preg_replace('{<[Aa] .+?>LINK([1-9][\\d\\-]*)</[Aa]>}' ,page_href('$1') ,$text);

上記の正規表現で得た29という数字をpage_hrefという関数に渡したいです。
29という数字は取れているみたいですが、関数内には29という数字が渡ってきておりません。
preg_replace内でどうすれば関数に数字を渡せますか?

ちなみにPHP5系です。

392:デフォルトの名無しさん
08/01/24 21:52:25
preg_replace内の$textは$testです
すみませんでした

393:デフォルトの名無しさん
08/01/24 23:30:33
>>390
kwsk

394:デフォルトの名無しさん
08/01/24 23:58:17
>>393
$pat2 = "(h?(ttps?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+))";
$rep2 = "<a href=\"h\\2\" target=\"_blank\">\\1</a>";
$body = ereg_replace($pat2, $rep2 ,$body);

↑こういうことじゃね?

395:デフォルトの名無しさん
08/01/25 00:14:49
>>391
そのくらいの正規表現ならPHP使いなら大抵知ってるからPHPスレでいいと思うよ

で、関数に引数を渡すにはその引数を評価してからじゃないと渡せない
というわけでまずは preg_replace() の引数である page_href('$1') を評価する
でもこの時点で preg_replace() は評価されてないので $1 は未定義

preg_match() を使って二つに分けて書くのが普通だろうけど
どうしても preg_replace() ひとつで済ませたい場合は e 修飾子を使ってこう書く

$test = '<a href="URLリンク(localhost)">LINK29</a>';
print preg_replace('{<[Aa] .+?>LINK([1-9][\\d\\-]*)</[Aa]>}e', 'page_href($1)', $test);

ただこういう謎コード書いて冷たい目で見られても知らない

396:デフォルトの名無しさん
08/01/27 10:16:29
BREGEXPのC言語のラッパーライブラリがあったら教えてください。
BREGEXPでなくても他に使いやすいライブラリがあれば教えてください。

397:デフォルトの名無しさん
08/01/27 11:14:06
C 言語なら PCRE とか鬼車で良いのではないかと。

398:デフォルトの名無しさん
08/01/27 12:52:37
>>396
元々Cだしなぁ。ラッパーに何を期待してる?

それはそれとして、素のBREGEXPは古いのでやめておいた方がいい。
いくつかバグも見つかっているようだし。せめてbregonigにすべきかと。

399:デフォルトの名無しさん
08/01/27 12:55:52
RE *re = ReCompile("/(\d+)/");
if(ReMatch(re, s)) { printf("%s", re->d1); }
ReFree(re);

これくらい簡単なのは確かに欲しい。

400:デフォルトの名無しさん
08/01/27 18:22:16
みんながCのアプリをC++でコンパイル通してくれればfreeもなしで
if (/([0-9]+)/ == str) ...
こうできるけどね。

クラス定義とかしなくていいからさぁ、
C++のランタイムにしてくればモジュール提供する側がラクなんだよなぁ

401:デフォルトの名無しさん
08/01/27 19:22:38
世の中の全てプログラム言語はC++でいいと?

402:デフォルトの名無しさん
08/01/27 19:37:07
C99

403:デフォルトの名無しさん
08/01/29 14:08:08
a b c
aa bb cc
aaa bbb ccc

これのインデントあわせって正規表現だけでできますか?perlです。

404:デフォルトの名無しさん
08/01/29 14:41:11
<A HREF="URLリンク(hogehoge.jp)">URLリンク(hogehoge.jp)
<A HREF="URLリンク(hogehoge.jp)">URLリンク(hogehoge.jp)
…以下続く

という文字列があるのですが、**************の部分に暗号化された文字(例:=7%be%8e%e4)が50文字くらい並んでいて
毎回文字数や形式が変動してしまいます。

<A HREF=" のほうはいいのですが、 HTML上に表示される文字のほうも暗号文字になってしまうので困っています。

正規表現で、HTML上に表示される文字のほうだけ、「リンク」という文字に変える方法はありますでしょうか?

405:デフォルトの名無しさん
08/01/29 15:32:43
>>403
右寄せ?左寄せ?
まあ無理なんじゃない
>>404
pack形式と実行環境書け

406:405
08/01/29 15:42:18
>>404の例は「美人」だと思われるが、それでいいのか?
あとhogehogeやめれexampleにしろ

407:デフォルトの名無しさん
08/01/29 15:55:11
>>404です

実はプログラミングを知らないので、実行環境はテキストです…
秀丸でできればおkです…

408:デフォルトの名無しさん
08/01/29 19:56:06
>>403
正規表現では無理だろう。

幅固定なら awk が楽だが、
最長のに合わせるんだったら perl で普通に
ガシガシ書いてきゃいいんじゃね?

409:デフォルトの名無しさん
08/01/30 00:44:52
perlでweb製作しています。

$txt の中の

href="URL" の中のURLを
http:example.net/test.cgi?url=エンコードしたURL
の形に一括変換したいです。

たとえば
href="URLリンク(search.com)"
href="http:example.net/test.cgi?url=http%3A%2F%2Fsearch.com%2Fstr.cgi?%2Fsearch%3Ffirst%3D1%26p%3D%25BA%25C7%25B9%25E2"
のようにしたいです。

$txt内には複数のhref=""があり、href=""外にもURLがあり、その部分は変換不要です。


$cgi = "http:example.net/test.cgi?url=";
$txt =~ s/(href\=\")([\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\$]*\")/$1&cgi$2/g;

$2の部分をエンコードすればよさげなのでエンコード法を調べてみましたが↓を↑に組み込み方がわかりません。
どなたか、お教えください。
$str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;



410:デフォルトの名無しさん
08/01/30 01:18:38
use strict;

my $txt = <<TXT;
href="URLリンク(search.com)"
href="URLリンク(search.com)"
TXT

$txt =~ s{(?<=href=").*?(?=")} {
no locale;
sprintf q{http:example.net/test.cgi?url=%s},
do{$_ = $&; s/([^\w ])/'%' . unpack('H2', $1)/eg; tr/ /+/; $_}
}eg;

print $txt;

411:デフォルトの名無しさん
08/01/30 01:26:23
>>410
THANKS

なんか、できそうですが、PERL事態初心者で構文自体は理解できませんorz

412:デフォルトの名無しさん
08/01/30 11:34:55
echoが含まれない行の検索って、java正規表現でできますか?

^.(?<!echo)*$ ではできませんでした。

413:デフォルトの名無しさん
08/01/30 11:45:01
>>412
すいません。できました。
下の2つともできたのですが、「.」のおく位置で何か違いはあるのでしょうか?

^(.(?!echo))*$
^((?!echo).)*$

414:デフォルトの名無しさん
08/01/30 13:56:44
それ上手く動かないだろ

415:デフォルトの名無しさん
08/01/31 01:40:06
ふつうは^(?!.*echo)
これでだめなら ^(?!.*echo).*でもいい

>>413
1つ目はダメ。たとえば次のような行:
echo
このeを.で評価したとき、継続の文字はcho。
echoという文字が続いているわけじゃないから、マッチは成功してしまう。
2つ目はうまくいくだろう。

416:デフォルトの名無しさん
08/02/01 00:31:08
質問です、PHPにおいてファイルパスの正規化をしています。

// テスト文字列、"/test/oame/doe/0"にしたい。
$location = "/test/./oame//doe/abc/../0/";
// 置き換え部分
$location = ereg_replace("//+","/",$location); /* "//" -> "/" */
$location = ereg_replace("/\./","/",$location); /* "/./" -> "/" */
$location = ereg_replace("/.+?/\.\./","/",$location); /* "/___/../" -> "/" */
$location = ereg_replace("/$","",$location); /* 末尾の"/"を削除 */

ereg_replace3番目の、/../の処理がうまくできていません、
$locationが空になります。これはどのように記述したらいいのでしょうか?

417:デフォルトの名無しさん
08/02/01 00:51:28
$location="/test/./oame//doe/abc/../0/";
$x=$location.split('/');
$location='/'+$x[1]+'/'+$x[3]+'/'+$x[5]+'/'+$x[6]+'/'+$x[8];



418:デフォルトの名無しさん
08/02/01 01:15:56
phpよく知らんけどこんなとか?

$location = ereg_replace("/[^/]+?/\.\./","/",$location); /* "/___/../" -> "/" */

419:416
08/02/01 02:04:34
どうもPHP固有の仕様に関することかもしれないので、
そっちで聞いてみたいと思います。
どうもありがとうございました。

420:デフォルトの名無しさん
08/02/01 13:56:31
.(?!xx)* は.*中に「xx」がない、との解釈になるのでしょうか?


よって下記とは異なる、でよろしいでしょうか。
(?!xx).*

421:デフォルトの名無しさん
08/02/06 19:08:06
正規表現で遊べないかと考えていたんけど、みさくら語を正規表現で表すとしたらどうやる?

422:デフォルトの名無しさん
08/02/06 19:56:32
ぐぐったら出てくるじゃないか
URLリンク(home.1555.info)

とりあえず上のJavaScriptの意味を調べてみては
その過程で正規表現より他に必要なものが見つかるはず

423:デフォルトの名無しさん
08/02/07 09:29:34
マッチさせた後どう処理するかの方が肝なので、正規表現だけ考えても仕方ないかと。

424:デフォルトの名無しさん
08/02/07 21:45:00
蒲焼《か はやき》
深川《ふか がわ》
↑のような《》に挟まれた半角スペース、全角スペースを指定する正規表現はどう書けばいいか教えて下さい。よろしくお願いします。

425:デフォルトの名無しさん
08/02/08 03:36:32
>>424
>>1

426:デフォルトの名無しさん
08/02/08 17:50:02
********aaa aa *
****age p * kk **
*aaaa
のようなものの*を行頭から連続している部分だけ-に換えたいんですが
--------aaa aa *
----age p * kk **
-aaaa
こういうような二重絞り込みみたいなものってperlのワンライナーでやる方法が知りたいです
perl -pe '/^[\*]*/ & tr/*/-/'
みたいな感じで条件を合成できそうな気がするんですが

427:デフォルトの名無しさん
08/02/08 18:02:31
perl -pe 's/^\**/q{-} x length($&)/e'

428:デフォルトの名無しさん
08/02/08 18:46:33
どうもありがとうございました
正規表現だけじゃできないんですね
perlも勉強することにします

429:424
08/02/08 19:34:16
ソフトは秀丸使ってます。実装言語とかよくわかりません。

430:デフォルトの名無しさん
08/02/08 19:58:15
テンプレのサイトで少しは勉強してきなよ

431:デフォルトの名無しさん
08/02/08 20:10:24
やってみって《》とその中までは指定できたけどその先がよくわからんのです。

432:デフォルトの名無しさん
08/02/08 20:27:02
[《 》]
↑だと《》も一緒に指定してしまうし、だめだ。

433:デフォルトの名無しさん
08/02/09 01:36:18
あきらめてこれで検索したら?
\f《[^《]*\f \f[^》]*》\f
置換するなら"\1置換後文字\3"とかで指定すればいいんだし。

434:デフォルトの名無しさん
08/02/12 01:09:08
phpなんですが、たとえば
$a = "aiueo";
$b = "aiu";
と、あるときに
変数$bの中身(aiu)が$aに含まれるかを調べたいんですがどうしたらいいでしょうか。

435:デフォルトの名無しさん
08/02/12 01:17:22
strstr

436:434
08/02/12 11:16:40
わかりました!ちょっと難しく考えすぎていたようです。
正規表現使う必要ないんですね。
ありがとうございます。

437:デフォルトの名無しさん
08/02/13 00:28:11
・・・これだ

438:デフォルトの名無しさん
08/02/13 15:18:34
phpです。
htmlファイル中の
<p>
test
あああ
いいい
ううう
</p>
を preg_match('/<p>((.|\n)+)<\/p>/', $source, $test); でマッチさせると
$test[0]には全体、[1]には一致した部分が入っていて正しいのですが
[2]に空白も入ってしまっているようです。
Array
(
[0] => <p>
test
あああ
いいい
ううう
</p>
[1] =>
test
あああ
いいい
ううう

[2] =>

)
このようになります。
上手く間にある文字列だけをマッチさせる方法はないでしょうか。

439:デフォルトの名無しさん
08/02/13 15:26:34
>>438
二個目のカッコ (.|\n) にマッチした箇所がキャプチャされてるね。
後方参照されないように (?:.|\n) とか。 ?: の意味は自分で調べて。

440:デフォルトの名無しさん
08/02/13 15:34:54
素早いレスありがとうございます。調べてみます。

441:デフォルトの名無しさん
08/02/15 18:54:31
Perl5.6でIPアドレスの範囲と場所をマッチングさせたいと思っています。

192.168.1.* を東京
172.16.0.* ~ 172.16.3.* を大阪

という場合はどのように判定させればいいのでしょうか。
Perl歴3日目なもんで・・・どなたかお力を。

442:デフォルトの名無しさん
08/02/15 19:00:38
とりあえず、正規表現でやろうとするのは間違ってますよ。
split /\./ してからごにょごにょするか、
CPANのNetAddr::IPのようなモジュールが使えないか検討してください。

443:デフォルトの名無しさん
08/02/15 19:04:12
なるほど。分けてから比較するんですね。
方向性が分かっただけでも助かりました。
ありがとうございました。

444:デフォルトの名無しさん
08/02/15 20:05:50
そういう場合はサブネットマスク使ったほうが綺麗にかけるぞ

445:デフォルトの名無しさん
08/02/15 22:54:30
255.255.252.0とかで切っててもいけるもんなんですか?

446:デフォルトの名無しさん
08/02/16 13:40:36
bitでかんがえてみろ

447:デフォルトの名無しさん
08/02/19 10:54:06
テキストエディタで検索・置換をするのに
特定のワードで始まる行末7文字の指定はどう書けばいいでしょうか?

それとDOSのワイルドカードだと
AA○○.txt
AA××.txt
とあったときren AA*.txt BB*.txtとすれば
BB○○.txt
BB××.txt
となったと思うのですが、正規表現でも同様な事ができますか?
こちらもテキストエディタでの検索・置換です

448:デフォルトの名無しさん
08/02/19 15:07:30
PHP正規表現チェッカー
URLリンク(www.rider-n.sakura.ne.jp)


449:デフォルトの名無しさん
08/02/19 17:34:36
>特定のワードで始まる行末7文字の指定
これの意味がわからない、例を出せ例を

450:デフォルトの名無しさん
08/02/19 17:36:10
テキストエディタっつってもできることできないこといろいろあるので
具体的なソフト名を出した方が回答が得られやすいと思われ。

451:デフォルトの名無しさん
08/02/19 17:48:38
コミュニケーション能力が不足しているな。
エディタの使い方とか正規表現とか覚える前に
人間として最低限必要な事を先に覚えたほうがいいんじゃない?

452:447
08/02/19 17:55:55
答えられないカスどもは黙っててください
わかる人だけが、質問に答えてくれればいいです
では引き続きよろしくお願いします

453:デフォルトの名無しさん
08/02/19 18:07:23
晩飯なににすっかなー

454:デフォルトの名無しさん
08/02/19 18:37:56
サンマの缶詰が安かったから、これで炊き込みごはん。
米1合を洗ってダイソーで買った105円の土鍋に入れる。
そのままサンマの缶詰1缶まるごとブチ込む。
水加減は、缶詰の水分と合わせて200mlくらいになるように調節。
30分くらい浸して火にかける。
最初は中火より強め。5分くらいで吹いてくるから弱火にして、さらに5分。
(赤子泣いてもフタ取るんじゃないぞ)
炊き上がったら5分むらす。
缶詰はサンマでなくても、鯖とかイカとか赤貝とか、好みのでOK。
味が濃い目の缶詰がいいな。味が薄いときは醤油や砂糖やみりんを加えてから
炊くといいよ。

455:447
08/02/19 18:40:47
エディタはJedit X1.11です

例)
あああ~~~1234567
いいい~~~1234567
………
………

~~~は文字数などもバラバラな任意な文字列(全角含む)

行頭『あああ』で始まる行の、行末『1234567』を
別の文字列『abcd』等に置換したいのです


456:デフォルトの名無しさん
08/02/19 18:43:41
あああ腹へったなー

457:デフォルトの名無しさん
08/02/19 20:02:10
(?<=あああ).*(?=.{7}) -> abcd

458:447
08/02/19 21:51:39
>>452
おいおい気がついたらとんでもない事勝手に書いてるな~(苦笑

>>457
ありがとうございます
戻り読みと先読みですか、なるほど!
ですが、これだと『~~~』の部分になってしまいますよね……

459:デフォルトの名無しさん
08/02/19 23:38:16
1合炊きの土鍋なんてあるのか
今度ダイソーに行ったら見てみよう

460:デフォルトの名無しさん
08/02/19 23:44:48
>>459
中国製の土鍋なんてどんな毒が混ざってるか分からんぞ。

461:デフォルトの名無しさん
08/02/20 00:38:19
ニ○リの土鍋以外にでたっけ

462:デフォルトの名無しさん
08/02/20 08:47:18
>>452
こういうことすぐ言う人って、昔いじめられてた人なんでしょ?可哀想にね

463:デフォルトの名無しさん
08/02/20 11:24:13
めんどくさがりなので俺なら↓でやってしまうな
/^(あああ.*?)(.{7})$/\1abcd/

464:447
08/02/21 18:24:17
>>463
ありがとうございます

いろいろ調べながらやってますがダメなようです
もうちょっとがんばってみます

465:デフォルトの名無しさん
08/02/21 18:30:35
せっかくヒントもらえたんだし、頑張ってもらわんとな

466:デフォルトの名無しさん
08/02/22 00:06:24
>>396
いまラッパーつくってるよ
ちょっとまてて

467:デフォルトの名無しさん
08/02/22 13:22:33
2008-03 発売(予定)
「詳説 正規表現 第3版」 (Jeffrey E.F. Friedl 著 / 長尾高弘 訳)
ISBN 978-4-87311-359-3 定価 5,040円

468:デフォルトの名無しさん
08/02/22 16:48:39
おや、和訳出るのね。今回は田和さんじゃないんだ
もったいない気もするがロングテールの人なら鉄板か

469:466
08/02/22 21:49:08
できましたよ 使ってみてください サポートはここで
URLリンク(fx10.web.fc2.com)

470:デフォルトの名無しさん
08/02/23 03:35:41
>>468
原書では追加はPHP関連とかがあったけど、以前のものからの改訂部分って
ほとんどなかったんだよね。
訳しなおしてるのかなあ?



471:デフォルトの名無しさん
08/02/23 20:12:38
php4なのですが、
<img src="new.gif" alt="New" width="10">
を正規表現で置換してaltの値だけを表示にすることは出来ませんでしょうか

よろしくお願いします

472:デフォルトの名無しさん
08/02/23 20:21:04
<img src=\".*?\" alt=\"(.*?)\".*?>
\1
でできたよ

473:デフォルトの名無しさん
08/03/05 20:28:49
秀丸で検索するときに文字列Aを含んで且つ文字列Bを含まない行全体を指定したいのですが、
(含む行)       ^.*文字列A.*\n
(含まれない行)   ^((?!文字列B).)*\n
で個別にはわかるんですがこの2つを合わせてて検索したいのですがどう書けばいいのでしょうか?

474:デフォルトの名無しさん
08/03/05 23:21:55
(^.*文字列A.*\n|^((?!文字列B).)*\n)

475:デフォルトの名無しさん
08/03/05 23:22:43
あ、間違えたわ

476:デフォルトの名無しさん
08/03/06 01:07:25
  dll
| ^
  dll

477:デフォルトの名無しさん
08/03/07 08:06:30
微妙にイケメソがいるな

478:デフォルトの名無しさん
08/03/07 08:12:32


479:デフォルトの名無しさん
08/03/07 08:35:28
(6
  ’)
(6


480:デフォルトの名無しさん
08/03/07 17:01:30
質問です。
小数点以下の右端の0を全部取り除きたいです。
小数点以下が0しかない場合は、小数点も含めて取り除きたいです。

3.00 → 3
3.02000 → 0.02

どう書けばよいでしょうか?
sprintf("%g", num) とすればいけるかと思いましたが、numが19120730.0000の場合に
1.91207e+07となり、使えませんでした。
perl5.8です。宜しくお願いします。



481:デフォルトの名無しさん
08/03/07 17:04:54
      ____
      // ̄ ̄`|
     /|断 だ |
     / |る が |
    /イ \___|
    / |// /| |
   /_\ /_/_レ|
   ∧o>/ イ≡三\|
  /ミ// r-<彡/|
  / /彡 ヾ\_O> |
 /iハ-イ)   ̄ヽ彡|
`/ i∧二    // |
/ (`ーv\  // /|
`<j`ーヾ_ゝ // (r|
  `<  ノ  /リ|
    `<  //7|
      `</ / |
        `<|


482:デフォルトの名無しさん
08/03/07 18:16:02
正規表現関係ないな。脳みそつかえ

483:デフォルトの名無しさん
08/03/07 20:32:03
>>480
s/\.?0+$//

484:デフォルトの名無しさん
08/03/08 10:40:12
約2万件のデータがあるのですが
使用する文字が半角全角交じりで途中に記号やスペースもあるかもなのです
文字数もわかりません
2つのキーワードで全部取れますか?

キーワード①東京都
キーワード②3-5-7

何区何町だったか思い出せません><
何故か357って数字だけ覚えてました^^

485:デフォルトの名無しさん
08/03/08 10:59:33
東-京/都
とかなってたら終わりだな

486:デフォルトの名無しさん
08/03/08 11:44:11
東京都 市ってなかったっけ?w

487:デフォルトの名無しさん
08/03/08 12:23:42
東京都.*?[33三].+?[55五].+?[99九]
で抽出してあとは手動かなぁ、俺がやるなら
漢数字が入る地名とかいちいちはじいてられないし

488:デフォルトの名無しさん
08/03/08 14:42:33
<object> ←これ検索したいんですお願いします

489:デフォルトの名無しさん
08/03/08 17:32:38
/<object>/

490:デフォルトの名無しさん
08/03/09 01:17:00
>>1
みたいにアンカー機能を付けたいのですがどのように書けば良いのでしょうか?

491:デフォルトの名無しさん
08/03/10 10:41:21
>>490
>>1 を見てその質問の仕方なのかよ!?

492:デフォルトの名無しさん
08/03/10 21:13:30
<hoge aaa="aa\"bb<cc>dd" zzz="ee\"ff<gg>hh">value</hoge>

value

と置換する正規表現を教えて下さい
言語は JavaScript で、戻り読みは使えません

493:デフォルトの名無しさん
08/03/10 21:23:42
正規表現よく分かりません><
<[^/]+>([^<]+)</.+>

494:デフォルトの名無しさん
08/03/11 02:03:14
入門 正規表現

サンプルがJavaで吹いた

495:デフォルトの名無しさん
08/03/11 06:12:35
>492
ブラウザのJavaScriptならXPathのほうが速くて正確

496:デフォルトの名無しさん
08/03/11 06:39:06
>>495
ブラウザじゃないです

取得したページからタグを削除することを目的としています

497:デフォルトの名無しさん
08/03/11 06:41:25
>>495
493の正規表現でいいんじゃね?

498:デフォルトの名無しさん
08/03/11 08:57:13
秀丸ではスペースは直打ちがデフォですか?
何か気持ち悪い。

499:デフォルトの名無しさん
08/03/12 01:26:27
Perlの正規表現で[^\.-z]っていうのがあったんですけどこれってどういう文字が当てはまるんですか?

500:デフォルトの名無しさん
08/03/12 01:36:32
>>499
ASCIIのコード表でも見てみればいいんじゃないかな

501:デフォルトの名無しさん
08/03/12 06:02:36
>>500
見てみたけどピリオドのほうがzより後に来てるのでこれおかしいんじゃないのと思って質問したのですが・・・

502:デフォルトの名無しさん
08/03/12 06:04:10
どこの表にそんなでたらめが書いてあるんだよ

503:499
08/03/12 06:07:45
あ、あれ・・・
もう一回調べてみたらピリオドのほうが先に来てる・・・

504:デフォルトの名無しさん
08/03/12 22:09:17
>>503
あー、すまん、書き間違えてたので修正しといた。

505:デフォルトの名無しさん
08/03/12 22:16:00
ってのは冗談として、
そういう ASCII コード表の順に大きく依存するような範囲指定を書くのは良くないと思う。
バグってハマったときに ASCII コードを凝視しないと解決いけなくなるし、移植性も低くなる。
アルファベットと記号は分けて書くようにするとか、文字クラスなどを利用した方が良い。

506:デフォルトの名無しさん
08/03/12 23:26:03
>>505
言うことは非常によくわかる。
文字クラスを使うべきっていうのには完全に同意。
でもASCIIコード順は移植性十分にある気がする。
とりあえず俺はASCIIコードで範囲指定するのは問題ないと思う。

507:デフォルトの名無しさん
08/03/12 23:49:22
個人的には
OSの事情とかLOCALEまわりのランタイムの完成度とか
POSIX文字クラスは警戒心をくすぐるものだw

508:デフォルトの名無しさん
08/03/13 02:07:43
こんばんは!
はじめましてよろしくです^^

キーワード①とキーワード②を同時にグレッペ出来る機能のあるツールはありますか
1000ファイル単位で処理したいんですが
1ファイルに①②②(②は同じものが連続である)
これを行ごとgrepしたいんです
②については1つ削除がいいです
よろしくお願い致します

キーワード①東京都 キーワード②性別②(性別マーク)

509:デフォルトの名無しさん
08/03/13 02:25:18
日本語でおk

510:デフォルトの名無しさん
08/03/13 03:23:27
3回読んだが意味わからん

511:デフォルトの名無しさん
08/03/13 03:30:34
なんとなくわかった気がしたけど最後の1行でぶちこわされた

512:デフォルトの名無しさん
08/03/13 07:22:30
グレッペ

513:デフォルトの名無しさん
08/03/13 07:40:30
こんばんは迄呼んだ。

514:デフォルトの名無しさん
08/03/13 08:09:40
グレッペのあたりで断念した

515:デフォルトの名無しさん
08/03/13 09:04:25
デフォルトのまで読んだ

516:デフォルトの名無しさん
08/03/13 09:11:02
1ファイルに3つのキーワードが先頭から
 都道府県名
 性別
 性別を表す何らかのマーク
の順番で並んでいて、
2つめと3つめは同じ性別を意味する別表現である。
例えば2つめが「男」だったら、3つめは「♂」となる。
これをgrepしたいが、性別については一つ消したい。

こんな感じか?
grepだけじゃ無理だからsedかawk使え、でおk?

517:デフォルトの名無しさん
08/03/13 09:48:33
わろた

518:デフォルトの名無しさん
08/03/13 12:54:59
縦読みだろJK

こはキ11こ②よキ

ここで、前半部分の"こはキ11こ"というのは、
個数は11個じゃないよ、というのを表している。
個は、!=11個、というわけだな。
後半部分の"②よキ"というのは、
2個でもねーよ、というのを表している。
(2個 !=)という逆ポーランド記法を使っているようだ。

つまり、個数は11個でも2個でもないということだったんだよ!!!
Ω ΩΩ<な、なんだってー!!!

519:デフォルトの名無しさん
08/03/13 16:15:05
Perlで>>1のようにアンカー機能をつけるためには正規表現を学べばいいと聞きました

if ($FORM{'text'} =~/>>$d/)
こんな感じでアンカーを抜き出すのは合ってるのでしょうか?
そのあと$DATA[$d]てきなのを取り出すにはどうしたらいいのでしょうか?

520:デフォルトの名無しさん
08/03/13 16:26:58
>>519
ハェ?誰に聞いたんだ?言った奴に質問してこい

521:デフォルトの名無しさん
08/03/13 20:34:26
$FORM{'text'} =~ s/>>(\d{1,4})/<a href='#$1'>>>$1<\/a>/ixms
思いついたやつを貼ってみる
こんなんだっけ?perlうろ覚えだわ

522:デフォルトの名無しさん
08/03/13 21:25:39
>>521
うまくリンクされません。。
$FORM{'text'} =~ s/>>(\d{1,4})/<a href='#$1'>>>$1<\/a>/ixms
↑これは桁数が1~4ならマッチということですよね
リンクされないのはなぜでしょうか?

523:デフォルトの名無しさん
08/03/13 21:30:52
すいません
自己解決しました
$val =~ s/</</g;
$val =~ s/>/>/g;
これでタグを無効にしていました
それで>>521さんの通りにやるとアンカー自体はマッチします
この後それを取り出すのはどのようにすればいいのでしょうか?
ログからデータを取得するのはわかりますが、実際にその取り出された部分だけを抽出して表示するやり方がいまいちわかりません

524:デフォルトの名無しさん
08/03/13 21:35:50
webprog池

525:デフォルトの名無しさん
08/03/13 21:58:16
>>508
やったな、おい!大漁じゃねーか!

526:デフォルトの名無しさん
08/03/14 07:20:33
なんだい今更になって
本人乙とでも言ってほしいのか?

527:デフォルトの名無しさん
08/03/14 18:46:06
>>523

528:デフォルトの名無しさん
08/03/14 21:06:23
「楽しいかもね、そうかもね」っていう文字列で
「楽.*ね」ってやると、.*は可能な限りマッチするから
「楽しいかもね、そうかもね」まで拾っちゃうでしょ?
それを「楽しいかもね」でマッチさせたい場合どうすればいいですか?

529:デフォルトの名無しさん
08/03/14 21:08:42
*?って?をつければ非欲張り型(なるべく短くマッチ)になるかも知れない

530:デフォルトの名無しさん
08/03/14 21:08:49
>>528
まずは>>1を音読したまえ

531:デフォルトの名無しさん
08/03/14 21:09:35
楽.*?ね

532:デフォルトの名無しさん
08/03/14 21:12:11
.*? でした。

533:デフォルトの名無しさん
08/03/15 00:19:58
60文字程のURLなんだけど
真ん中あたりの15文字くらいがわかんなくなりました
正規表現でなんとかなりませんか?

534:デフォルトの名無しさん
08/03/15 00:27:42
その15文字の前か後ろの長いほうで検索すればいいだろ…

535:デフォルトの名無しさん
08/03/15 10:57:56
>>528
楽[^、]*ね

536:デフォルトの名無しさん
08/03/15 11:05:59
>>535
それが許されるなら
楽しいね
だって許されるはずだ

537:デフォルトの名無しさん
08/03/15 11:47:45
楽しい、ね

538:デフォルトの名無しさん
08/03/15 11:48:14
楽しいかもね楽かもね

539:デフォルトの名無しさん
08/03/15 14:28:52
>>535
だったら
 楽[^ね]*ね
でもいい様な。

540:デフォルトの名無しさん
08/03/15 18:53:11
ワード協会とか除外すればいいのどは

541:デフォルトの名無しさん
08/03/15 22:03:46
安楽死ね

542:デフォルトの名無しさん
08/03/16 00:57:08
「楽しいかもね、そうかもねABC」っていう文字列で
「ね.*$」ってやると
「ね、そうかもねABC」まで拾っちゃうでしょ?
それを最後の「ねABC」でマッチさせたい場合どうすればいいですか?

543:デフォルトの名無しさん
08/03/16 00:59:00
ね.*?$ だと何度言えば

544:デフォルトの名無しさん
08/03/16 01:02:19
>>543
マジで?できないけど??

545:デフォルトの名無しさん
08/03/16 01:04:58
[^ね]を使うとか、いろいろやりようはある

546:デフォルトの名無しさん
08/03/16 01:08:49
>>544
最短一致に対応してないタイプの正規表現なのかな。

547:デフォルトの名無しさん
08/03/16 01:16:55
>>543,546
その目的には、最短一致は使えないから。
照合開始位置を後ろにずらしてまで最短を見つけるわけではない。

548:デフォルトの名無しさん
08/03/16 01:21:20
ああ、そうなんだ。

549:デフォルトの名無しさん
08/03/16 01:34:22
さあ、この問題を解決できる神はいるのだろうかっ!!(ただ答えが欲しいだけ)

550:デフォルトの名無しさん
08/03/16 01:35:49
ね[^ね]*$ じゃないのか?

551:デフォルトの名無しさん
08/03/16 01:50:55
それもう545で提案されてんじゃん。

552:デフォルトの名無しさん
08/03/16 02:24:31
>>550
THX!ひとまずそれで省いた後
ね$をマッチさせることにするよ

553:492
08/03/16 03:14:37
やはり戻り読みが使えないと難しいですか?

554:デフォルトの名無しさん
08/03/16 03:24:12
戻り読みはいらんだろ

555:デフォルトの名無しさん
08/03/16 06:10:58
Vimで
2008年3月16日 06:09:42

2008-03-16 06:09:42
のように年月を-で、日を削除するように置換するにはどうしたらいですかね?

556:デフォルトの名無しさん
08/03/16 06:25:49
:%s/年/-/
:%s/月/-/
:%s/日//

じゃあかんのんか?
というか、3 を 03 に変える所までやりたいの?

557:デフォルトの名無しさん
08/03/16 06:31:06
>>556
説明不足ですみません、対象のテキストには日付以外にもいろいろ書かれていて、
年や月などの単語はそのままに日付部分だけ置換したいのです。
日付の正規表現が理解できていないので、こちらでお尋ねした次第です。

>というか、3 を 03 に変える所までやりたいの?
可能ならしたいです。

558:デフォルトの名無しさん
08/03/16 07:04:36
とりあえずこれでいけた。

:.s/\([0-9]\{1,4}\)年\([0-9]\{1,2}\)月\([0-9]\{1,2}\)日/\=system("printf '%04d-%02d-%02d' " . submatch(1) . " " . submatch(2) . " " . submatch(3))/

559:デフォルトの名無しさん
08/03/16 07:09:55
しまった。
テスト用に1行のみの置換にしてた。
:.s は :%s に変えてね。
まあ分かると思うけど。

560:デフォルトの名無しさん
08/03/16 07:45:51
>>558さん、ありがとうございます。
やってみたのですが、うまくいかず、日付の部分が丸ごと消えてしまうようです。

'printf' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出ました。こちらのVimの設定が悪いのでしょうか?もう少し試してまたレス返しにきます。

561:>>555=>>557
08/03/16 08:05:26
何度か試したのですが、同じ結果です。
一応こちらの手順ですが、スレに貼って頂いたものをクリップボードに入れてから、
:<C-R>*
で貼り付けして、先頭を :%s/ に変えてテキスト全体に適用してから、実行しました。ほぼコピペなので打ち間違いはないと思うのですが。
Vim7 を Windows 2000 sp4 で使ってます。
printf などもわからないため、もう少し調べてみます。

562:デフォルトの名無しさん
08/03/16 10:10:00
>>555
ViVi でだけど以下でいけた
:s/(\d{4})年(\d{1,2})月(\d{1,2})日 (\d{2}):(\d{2}):(\d{2})/\1-\2-\3 \4:\5:\6

Vim でも同じように出来るんじゃないか?

563:デフォルトの名無しさん
08/03/16 11:45:32
>>562さん、やってみましたが無理でした。
マッチはうまくいってるみたいですが、置換の仕方がVimとだいぶ違うようです。
ViViはいじったことないので、少し調べてみます、スペース入れる辺りがよくわかりませんので。
わざわざありがとうございました。皆さん、お手数おかけしております。

564:デフォルトの名無しさん
08/03/16 12:03:58
お二人のご教示をヒントにいろいろいじっていたら、以下で、

%s/\([0-9]\{1,4}\)年\([0-9]\{1,2}\)月\([0-9]\{1,2}\)日/\1-\2-\3/g

2008年3月16日 06:09:42

2008-3-16 06:09:42

のように、桁数が1桁のままですが、それ以外は置換できました。もう少し試行錯誤してみます。

565:デフォルトの名無しさん
08/03/16 12:29:58
月などを2桁にしたいのなら、ViViだと以下のようにすればいい

:s/(\d{1,4})年(\d{1,2})月(\d{1,2})日 (\d{1,2}):(\d{1,2}):(\d{1,2})/format("%04d-%02d-%02d %02d:%02d:%02d", $1,$2,$3,$4,$5,$6)/e


566:デフォルトの名無しさん
08/03/16 16:54:21
>>560
>>558 は printf コマンドがあることを前提にしてるから
Windows のコマンドプロンプトだと無理なんだろう。
Cygwin でやればいけるはず。

567:デフォルトの名無しさん
08/03/16 17:51:53
>>565さん、ViViを使って、教えていただいた正規表現でできました。
いろいろVimで粘ったのですが自分のスキルでは無理だったので。
ありがとうございました。

>>566さん、ご教示ありがとうございます。
Cygwinはよくわからないのと、>>565さんの方法で出来たので printfコマンドはあきらめました。

>>555の質問の件は>>565さんので解決することができました。
皆さん、いろいろ教えていただきありがとうございました。お世話になりました。

568:デフォルトの名無しさん
08/03/16 19:50:39
あまりの丁寧なレスに
全米が泣いた

569:デフォルトの名無しさん
08/03/18 14:41:31
初心者です、それなりに調べたんですが・・

あああああああ
aaaaaaaaa
??????????
乙乙乙乙乙乙乙乙乙乙乙乙

こういうある文字の繰り返しを、一つの表現でマッチできますか?たとえば10文字以上
専ブラで弾きたいんですが、数字はのぞけると嬉しいです

570:デフォルトの名無しさん
08/03/18 14:44:54
[^\d]{10,}

571:デフォルトの名無しさん
08/03/18 14:45:26
"正規表現 後方参照"でググれ

572:デフォルトの名無しさん
08/03/18 16:39:30
任意の一文字って . ドットのことでおききしたいんですけど
探したい文字の前につけるんですよね?
< を探すのに
.< として検索したら結果は
>< として検索されます
検索結果に > を含めない方法教えて下さい

573:デフォルトの名無しさん
08/03/18 17:00:47
>探したい文字の前につけるんですよね?
新しい解釈だな

574:デフォルトの名無しさん
08/03/18 19:07:48
久しぶりに理解不能なの読んだな
「>」でない任意の1文字 + 「<」
と一致させたいってことなら [^>]<
検索結果から>だけ取り出したいってなら.(>)
後者に何の意味があるのかは知らないけど

ただ少なくとも正規表現について基礎から勉強しなおしたほうがよさそうだな

575:デフォルトの名無しさん
08/03/18 19:15:14
むしろ日本語について基礎から勉強しなおしたほうがよさそうだな

576:デフォルトの名無しさん
08/03/18 19:38:21
最近も508が理解不能だったぞ

577:デフォルトの名無しさん
08/03/18 20:04:03
読み直して 吹いた>>508

578:デフォルトの名無しさん
08/03/18 20:12:36
>>514が秀逸

579:デフォルトの名無しさん
08/03/19 02:36:39
>>577
あれからダブルグレッペというマクロをつかわせていたらきましたよw
一応テストしてから本格的に使わせていただこうと
HDDの奥深くにテスト用のテキスト置いて、 grep開始!
ほへ?
グアッガッガーッ!!うわぁぁああああ!!!
この音は何??
なんだろか!?
ハードディスクが唸りまくってるタラリーン
よくわからないけどドライブごとgrepしてくれたよ
1ファイルで5000行~1万行が40万ファイルあるのに・・・(ポカーン
コントロール+オルト+デリートでストップかけたら
エディター画面の後ろ側にエラー画面がいくつもでてたww
今時ブラクラ??
驚いたというかワラタwww


580:デフォルトの名無しさん
08/03/19 15:44:41
使用するソフトはProximitronです。

以下のような広告を含む<table>ブロックを丸ごと削除したいと考えています。
<table width=100% class=tbl border=1 cellpadding=5>
<tr bgcolor=#EEEEEE><td height=5px></td></tr>
<tr>
<td align=center>
<iframe id='a5c37d59' name='a5c37d59' src='URLリンク(ads.xxx.com)' framespacing='0' frameborder='no' scrolling='no' width='300' height='250'>
<a href='URLリンク(ads.xxx.com)' target='_blank'>
<img src='URLリンク(ads.xxx.com)' border='0' alt='' /></a>
</iframe>
<script type='text/javascript' src='URLリンク(ads.xxx.com)'></script></td></tr><tr bgcolor=#EEEEEE><td height=5px></td>
</tr>
</table>

一部伏字にして置換してあるので100%同じ文字列ではありません。
これをマッチさせて丸ごと削除したいのです。

<table.*>.*</table>
これだとページ自体が全体的に崩れてしまいます。
tableの開始と終了を合わせないといけないのですが
そこがネックになっています。

581:デフォルトの名無しさん
08/03/19 16:43:48
>>580
正規表現スレだからこんな書き方をするとスレ違いかも知れないけど、
$NEST(<table,[^>]++class=$AV(tbl)[^>]+>*,</table>)

「*」の所を、「*消したい文字を入れる*」とか、すればいいんじゃないかな。

582:デフォルトの名無しさん
08/03/23 02:57:04
拡張子のないファイルに.txt付けたいです
aa1234ファイル

[0-9]
$[\.(txt)]
だめですか?

583:デフォルトの名無しさん
08/03/23 03:02:31
>>582
>>1

584:デフォルトの名無しさん
08/03/23 03:12:15
+ が使えるなら
s/^\([^.]+\)$/\1.txt/
+ が使えないなら
s/^\([^.][^.]*\)$/\1.txt/

585:デフォルトの名無しさん
08/03/23 04:16:02
>>583
了解
>>584
ありがとうございます

586:デフォルトの名無しさん
08/03/23 12:58:56
(Perl5互換)のツールで半角括弧を削除したいんですよろしくお願いします
元の文字列
(10123)test.txt
希望する変換後の文字列
10123test.txt

使ってみたいツールはこれです
ベクター Flexible Renamer
URLリンク(hp.vector.co.jp)

このスレの>>1関連サイトを廻ってみたけどよくわかりませんでした
ツールの作者HPもいって見ましたがQ&Aとか掲示板はなかったです
どなたか括弧の取り除き方教えて下さいお願いします

587:デフォルトの名無しさん
08/03/23 14:28:15
( 削除
) 削除

588:デフォルトの名無しさん
08/03/24 17:03:04
正規表現教えて下さい
<h2>タイトル</2>
「<」から「>」までお願いします(「タイトル」の文字列含む)
どなたかよろしくお願いします

589:デフォルトの名無しさん
08/03/24 17:06:50
>>1

590:デフォルトの名無しさん
08/03/24 17:15:46
>>588です
書き込んでから>>1読みました
今のところ使うソフトは秀丸エディターを試用しようしてみよう思いますが
ツールは何も揃えていない状態なので解答者サンのお勧めのソフトで始めてみます
正規表現でテキストの加工をしたいです
初心者でも挫折しないで継続して使っていけるソフトも一緒に探してます
金額にもよりますがフリー有料問いません
使うソフトはまだ明確には決めていませんので取り合えずシェアーウェアーで試してから
本格的にやってみようと思います
<h2>タイトル</h2>
よろしくお願いします

591:デフォルトの名無しさん
08/03/24 17:18:55
<h2>///ここは<strong>見出し</strong>です///</h2>

こんなのは想定しなくていいのか。

592:デフォルトの名無しさん
08/03/24 17:26:26
>>591サン
即レスありがとうございます
そういうのもあるかもしれないです
文字列の中に <strong>見出し</strong> が入っていれば検索文字列も変わりますよねorz
<h2>からエンドを</h2>にする方法教えて下さい
お願いします


593:デフォルトの名無しさん
08/03/24 17:27:33
途中に改行は?

594:デフォルトの名無しさん
08/03/24 17:53:20
>>593サン
588です
途中に改行は想定していなかったです
あるかもわからないと今気づきました
お手数お掛けして恐縮ですが何卒よろしくお願い致します

595:デフォルトの名無しさん
08/03/24 23:10:25
おまいら、よく>>588の文章で、その意図が判ったな。

596:デフォルトの名無しさん
08/03/24 23:37:54
<h2>///ここは<h2><strong>見出し</strong></h2>です///</h2>

こんなのは想定しなくていいのか。


597:デフォルトの名無しさん
08/03/24 23:43:26
結局、正規表現は入れ子は処理できないのでは

598:デフォルトの名無しさん
08/03/24 23:46:46
<h2> (.*) </2>
\1

<h2> ([.\n]*) </2>
\1

とかでいいのでは?

599:デフォルトの名無しさん
08/03/24 23:47:39
なるほどね
過去スレ読めばよかったorz
>>33まで読んだ

600:デフォルトの名無しさん
08/03/24 23:52:05
>>595がここに張り付いてるようじゃ
このスレで勉強させてもらおうって人も尻込みするね
>>595の意図はそれなんだろうけど・・・

601:デフォルトの名無しさん
08/03/24 23:54:45
ライオンはなんとかって話なわけで
潰しにかかれるうちに潰しちゃう
やな奴だ氏ねばいいよ
9図

602:デフォルトの名無しさん
08/03/24 23:58:48

- - - こ こ へ 何 か 聞 き に 来 た 人 へ - - -

ま ず 過 去 ス レ 読 ん だ ほ う が い い
変 な 潰 し 屋 が い て る よ う な の で ご 注 意 下 さ い


603:デフォルトの名無しさん
08/03/25 00:18:28
質問です。

正規表現だと、~~を含む行を探すってのは簡単にできるんだけど
~~を含まない行を探すのはどうするのが一般的なのでしょうか?

エディタならば、「abcde」を含む行を
^((.*)abcde(.*))\r\n
で探して、削除することで処理できるのですが、
これはあくまで含む行を探してるのであって、
含まない行を探すというのとは違うような気がして釈然としません。

別に今困ってるわけじゃなくて、知っておきたいだけなのですけど・・・。
よろしくお願いします。

604:デフォルトの名無しさん
08/03/25 00:24:37
うあ、>>473ですでにあった。

605:デフォルトの名無しさん
08/03/25 00:25:12
>>603
言語理論での定義では、正規表現は「ある文字列を含まない文字列」はあらわせない。
しかしそれでは不便なので、パターンマッチ用に拡張された言語では否定を表現する方法を持っている場合はある。

606:デフォルトの名無しさん
08/03/25 02:48:25
sage を含まない文字列

^(?!sage)(.(?!sage))*$

607:デフォルトの名無しさん
08/03/25 03:06:14
>>603
^([^a]|a([^b]|b([^c]|c([^d]|d([^e]|$)|$)|$)|$)|$)*

608:デフォルトの名無しさん
08/03/25 08:13:09
>>603
vi, vim, ViVi なら

:v/regexp/d

で正規表現に一致しない行を削除できる

609:デフォルトの名無しさん
08/03/25 12:28:43
<h2 title="></h2>">みだし</h2>

こんな記述も可能ではある。
結論: HTMLのパースに正規表現は向かない



610:デフォルトの名無しさん
08/03/25 13:40:43
java1.4ですが、

 1234567890 を 1234______ にリプレイスしたいのですが、

どうすればできるでしょうか?

611:デフォルトの名無しさん
08/03/25 13:44:44
"1234567890".replaceAll("[567890]", "_")

612:デフォルトの名無しさん
08/03/25 13:45:35
"1234567890".replaceAll("[5-90]", "_")

613:デフォルトの名無しさん
08/03/25 13:55:11
「違うんです。
 987654 なら 9876__
 314159265358979 なら 3141____________
 にしたいんです」
かな。

614:デフォルトの名無しさん
08/03/25 14:02:37
>>610
自己レスですが、いろんなサイトを見よう見まねで + 気合で何とかできました。


"1234567890".replaceAll( "(^....|).+?(?=.+|$)" , "$1_")



615:デフォルトの名無しさん
08/03/25 20:25:13
「任意の一文字」の.や「前にある文字の1回以上」の+は、bashだとそれぞれ?と*ですが、
正規表現は規格で決まってるものではないんでしょうか?
言語ごとに違いってあるんでしょうか?(bashは言語じゃないってのもありますが・・・)

616:615
08/03/25 20:27:21
「前にある文字の1回以上」の+

↑は違いましたね・・・失礼しました。

617:デフォルトの名無しさん
08/03/25 20:28:54
>bashだとそれぞれ?と*
それ性器表現じゃないし


618:615
08/03/25 20:49:04
>>617
bashのは正規表現とは言わないんですか、失礼しました。そう呼んでるサイトも見かけますが・・・

bashの*に対応するのは.*ですね。
bashスクリプトとperlスクリプトが混ざってると、ちょっと紛らわしいですね

619:デフォルトの名無しさん
08/03/25 22:05:10
bash のは言うならワイルドカードだな。

620:デフォルトの名無しさん
08/03/26 01:49:44
grepとglobの違い。

621:デフォルトの名無しさん
08/03/26 03:33:07
えっ?どう違うの?

622:デフォルトの名無しさん
08/03/27 13:47:15
えっと・・・
VBS (WSH Windows Scripting Host) のRegExp では
マルチラインの指定はできんですか?
ググって必死こいて探してるけど見つけられないんで。

623:デフォルトの名無しさん
08/03/27 14:56:06
かなり前のバージョンでサポートされた

Set ObjRegExp = New RegExp
ObjRegExp.Multiline = True

624:デフォルトの名無しさん
08/03/27 22:10:38
>>623
できました。アリガトです。

625:デフォルトの名無しさん
08/03/29 17:03:54
「ます」「ただいま」
という二つの単語がある場合で
上記2つにはマッチするが
たとえば「まる」という言葉にはマッチしないようにする
正規表現ってどうやればいいですか?

今は「ます」と「ただいま」の2語をマッチするようにしているのですが、
やり方が悪いのか「まる」という言葉でもマッチしてしまいます。

626:デフォルトの名無しさん
08/03/29 17:12:13
>今は「ます」と「ただいま」の2語をマッチするようにしている
具体的にはどうしているの?

627:デフォルトの名無しさん
08/03/29 17:15:05
(ます)|(ただいま)

どう間違えると「まる」にマッチするのか知りたい。

628:625
08/03/29 18:03:22
()なんてあったのか!

解決しました!ありがとうございます。

629:デフォルトの名無しさん
08/03/29 18:12:12
どうやっていて (ます|ただいま) にマッチさせたいのに まる に
マッチしてたのかという謎を解決して欲しいです。

630:デフォルトの名無しさん
08/03/29 18:43:26
>>627
そんな書き方があるとは知らなかった
どの正規表現実装か教えてくれ

631:デフォルトの名無しさん
08/03/29 21:09:51
Firefox2.0.0.13の拡張機能Adblock Plus 0.7.5.3でフィルタを登録しています。
/[\W_]ad(?!=&)(banner|click|conmatch|eeper|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|trix|xchange|wrapper)?s?[\W\d_]/

これが↓にもヒットしてしまい表示されなくて困ってます。
URLリンク(navi.ekitan.com)
デコードすると、
URLリンク(navi.ekitan.com)大阪府大阪市中央区大阪城1-1&ftell=&sf=10900
よく分らないのですが、"中"の%E4%B8%ADに当たってるようです。

一番よく使ってるフィルタなので消したくないです。
このフィルタで"中"にはヒットしないような正規表現は可能ですか?

632:デフォルトの名無しさん
08/03/29 21:55:14
/[^%A-Za-z0-9]

633:デフォルトの名無しさん
08/03/30 07:49:32
一番外側の開始文字~終了文字までを
マッチさせるようなのは正規表現でいけません?

開始終了を括弧としたら
"(((1 + 2) * 3) - 4) / 5"
の時
"(((1 + 2) * 3) - 4)"
ここまで取れない?

括弧見づらいからブレイスにするけど
/{([^{}]*|{[^{}]*})*}/
だと2段までしかとれないのは何故?


634:デフォルトの名無しさん
08/03/30 08:00:38
/{([^{}]*|{([^{}]*|{[^{}]*})})*}/

こうすれば3段までマッチさせられるよ。

635:デフォルトの名無しさん
08/03/30 09:04:26
普通に最長一致させてやりゃいいんでないの?
(1+2)*3)-4 みたいな構文が来たら困るけど

636:デフォルトの名無しさん
08/04/03 12:27:53
質問ですperl5.8です

<aaa bbb ccc>
ddddddddddddd<aaa>

検索:<aaa.*?>(.+?)<aaa> で検索したけどマッチしません。どなたかよろしくお願いします

637:デフォルトの名無しさん
08/04/03 13:22:02
>>636
.*? の部分かな。
<aaa[^>]*> でどうだろう。

638:デフォルトの名無しさん
08/04/03 14:20:12
>>636
対象が複数行なんだよね?

$str = "<aaa bbb ccc>\nddddddddddddd<aaa>";
$str =~ s/<aaa.*?>(.+?)<aaa>/$1/s; # 後ろに s つける
print $str;

639:デフォルトの名無しさん
08/04/03 14:22:45
改行のせいだろJK

(?s-:<aaa.*?>(.+?)<aaa>)

640:デフォルトの名無しさん
08/04/03 14:23:10
うわぁ、更新してなかったorz

641:デフォルトの名無しさん
08/04/03 22:23:59
みなさんレスありがとう>>636です
上手くいかないです^^;
もうちょっとガムバッテみます
複数行になると難しいですね
続いた行はできそうな気がするんだけどできないorz

642:デフォルトの名無しさん
08/04/03 22:43:52
while (<FH>) { /pattern/s; # 先生、何もマッチしません }
if (@lines =~ /pattern/s) { # 先生、ここ通りません }

どっちか知らないけど。

643:デフォルトの名無しさん
08/04/04 20:06:53
" 11 11 "
これにマッチあせて"11 11"を取得することはできますか?
「 *([^ ]*[.]*[^ ]*) *」
でやってみたのですがうまく取得できなくて・・・
スペースは全て全角です
お願いします

644:デフォルトの名無しさん
08/04/04 21:22:00
>>643
途中の[.]*でぶっ飛んでる。つーか、. に [ ] つける意味がないよね。

645:デフォルトの名無しさん
08/04/04 21:30:34
>>644
じゃあ教えてあげればいいのに文句書くだけなら解答者じゃない荒らしだ
どっか池

こんな感じか違うかw
".1+.*?"

646:デフォルトの名無しさん
08/04/04 21:35:40
スペースが全角って、もとの文字列がってこと?
あと 11 と 11 は同じ文字?
それなら

+(([^ ]*) +\1) +

かな。全角を認識させたいなら・・・環境によるなぁ。

647:デフォルトの名無しさん
08/04/04 22:01:59
perl5.8です
文字列を3行続けて取得したいのですが教えて下さい

【郵便】100-0001
【住所】東京都○○区○○町1-2-3 もしくは 神奈川県○○市○○町1-2-3○○○○○○○○マンション3階303号室
【電話】03-3000-XXXX

1行目、3行目は行頭にそれぞれ【郵便】【電話】がありますが
2行目の住所部分はマンション名が長かったりすると【住所】はなくて行頭が東京都や神奈川県から始まる行もあります

3行連続で取得する方法教えて下さい

648:デフォルトの名無しさん
08/04/04 22:18:25
【郵便】[.\n]*?【電話】.*

649:デフォルトの名無しさん
08/04/04 22:26:17
>>647
スレリンク(php板:280番) とか
スレリンク(php板:42番) とか
>>636辺りに心当たりはないか。

650:デフォルトの名無しさん
08/04/05 00:02:46
>>646
「○11○5656○」
○は全角スペースです
全角スペースに囲まれた文字列を取得したくて・・・
11とか5656は任意の文字で
間に全角スペースが入っているかもしれないんです
上の文字列だったら「11○5656」
って感じで
わかり難い書き方して申し訳ないです

651:デフォルトの名無しさん
08/04/05 00:10:43
>>650
言語は?

652:デフォルトの名無しさん
08/04/05 00:19:51
○(.*)○
これで抽出できないかな?正規表現始めたばっかでよくわからないけど

653:デフォルトの名無しさん
08/04/05 00:20:47
○*(.*)○*
こうか、すまん

654:デフォルトの名無しさん
08/04/05 00:21:36
基本的に正規表現は最長一致するから >>652 で問題ないんじゃない?

655:デフォルトの名無しさん
08/04/05 00:27:45
test

656:デフォルトの名無しさん
08/04/05 01:28:02
>>650
言語と文字コードがないとあきまへんが、なんとかせーっちゅーなら、

(\xe3\x80\x80|\xa1\xa1|\x81@)(.*)(\xe3\x80\x80|\xa1\xa1|\x81@)

これでいけますわ。utf-8,shift_jis,euc-jpなんでもこいのすぐれものや。

657:デフォルトの名無しさん
08/04/05 01:59:54
どうして正規表現はいつもいつも顔文字に見えてしまうんですか?

658:デフォルトの名無しさん
08/04/05 02:59:24
>>650
「○11○5656○」
これの1個目3個目の空白はマッチさせないんだよね
2個目の空白は実際にはあるかないかわからない
両隣は任意の文字
ん~これピッタシあわせるのは今の情報だけでは難しいというより不可能じゃないでしょうか
任意の文字が半角だけの構成なら[0-9][a-z]簡単なんだけどなー
何か他にkeyに出来そうなのないですか?

それとここで解答者が自分の環境でよい結果が出てもあなたの環境ではマッチしないかもしれない
環境に合った正規表現の使い方をしないとマッチさせれない場合がありますよ
質問者も解答者も徒労に終わるので
あなたが正規表現をどのように使うのか記載したほうがいいよ
正規表現を扱おうとする言語もしくは正規表現を扱えるエディターで検索しようとしているのか
あなたを攻めてるわけではないので誤解しないようにね

659:デフォルトの名無しさん
08/04/05 03:16:49
>>650
[^\x81@].*[^\x81@]

660:デフォルトの名無しさん
08/04/05 08:53:44
>>653
ああ、そうか。そうだな。

661:650
08/04/05 12:28:26
すみません戻りました
皆様レスありがとうございます
「○11○5656○」
○は全角スペース、何個あるかわからないし、ないかもしれません
「一三○四○○○」だったら「一三○四」
「○○○○八九4○○た」だったら「八九4○○た」
こんな感じで取得したいです
他の文字は任意です。全角の場合が多いですが
言語はJava、コードはUnicodeかな?
簡単に言うと両端の全角スペースをトリムしたいだけなのですが・・・
わかり難い表現ですみません

662:デフォルトの名無しさん
08/04/05 12:35:01
先頭の全角スペースを除去、末尾の全角スペースを除去
という処理にしたほうが簡単だよ

非欲張りなのが使えればこうかな
/ *(.*?) *$/

663:デフォルトの名無しさん
08/04/05 12:50:55
/^□*([^□]+(□+[^□]+)*)□*$/

664:デフォルトの名無しさん
08/04/07 03:05:23
gawk3.16です
2行に渡る文字列を検索でマッチさせたいです
<title(.+?)\n.*title>
秀丸(正規表現ON)ではマッチしていたのですがgawkではマッチしません
アドバイス頂けましたら幸いです
どうぞよろしくお願い致します

665:デフォルトの名無しさん
08/04/07 03:14:35
mオプション可能な処理系を使うか、事前に加工しとくか。

666:デフォルトの名無しさん
08/04/07 04:08:57
>>665さん
mオプション
マルチラインですね
実はgawkのスクリピトを教えていただいたのです
とても気に入り今後末永く使わせていただこうと思うのですが
複数行の検索が秀丸と違うようなので戸惑っています
他にgawkのアドバイスありましたらよろしくお願いします

667:デフォルトの名無しさん
08/04/07 06:08:38
>666
相変わらず具体的じゃないのね。
665をやったがこういう風にうまくいかなかったとか
こうしたけどダメだったとかあれば、アドバイスのしようもありますが、
他にアドバイスと言われてもなかなか。

668:デフォルトの名無しさん
08/04/07 08:58:29
>>666
ない物は仕方ない。
mオプションの正規表現を組み込んだawkを自前で作る?
perlとか、正規表現が拡張されてる処理系に移った方が、後々幸せ。

669:デフォルトの名無しさん
08/04/07 13:26:21
gawk3.16で複数行にまたがる文字列をマッチさせたいです
エイチティティピー://www.kt.rim.or.jp/~kbk/gawk/gawk_5.html#SEC28
上記アドレスのページに「複数行レコード」と記述がありました
>変数FS に "\n"という文字列をセットすれば良い。
> (これは、改行にマッチする単純な正規表現である)
わかる方おられましたら教えて下さい

やってみたこと
gawk.exe "FS = \n 検索文字列 プリントアウト"入力ファイル>出力ファイル
エラー:^バックスラッシュが行最後の文字になっていません

gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル^
エラー:More?

gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル/
ファイル名、ディレクトリ名 またはボリュームラベルの構文が間違っています

PS:
666です
>>667さん
>>668さん
レスありがとうです


670:デフォルトの名無しさん
08/04/07 13:57:34
>>669
気付け。gawkじゃ無理。
FSはフィールドセパレータ。用途が全然違う。

671:デフォルトの名無しさん
08/04/07 14:00:36
そういうのはどうしてもawkでやりたければtrで改行文字を置換してからawkで処理して戻すとかやるからなぁ。
awkだけじゃなくて、基本的な知識が足りなすぎるよ。

672:デフォルトの名無しさん
08/04/07 14:04:12
>>669です
>>670さん
>>671さん
gawkは諦めた方がよいかもしれないですね
私じゃ無理だということはわかりました
アドバイスありがとうございました^^;


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