正規表現 Part9at TECH
正規表現 Part9 - 暇つぶし2ch554:486
12/02/14 10:37:31.73
>>519
レスありがとうございます。


555:デフォルトの名無しさん
12/02/15 12:57:50.64
性器表現

556:デフォルトの名無しさん
12/02/15 16:39:15.39
GUY出

557:デフォルトの名無しさん
12/02/15 22:15:15.09
性器をGUYが出してるのか

558:hidi and peter
12/02/16 23:00:17.96
(?![BCAA\.md]).*.mdとすると除外されるが
これって、たまたまなので気持ち悪いような気がする
[BCA\.md]でも同じ意味だしな

●正規表現の使用環境
PCRE (a.k.a PHP など 実際はApache)

●検索か置換か?
検索

●説明
特定のファイル名を除外する正規表現を書きたい(とりあえずは1つでいい)

●対象データ
ABCA.md
BCAA.md
CABA.md

●希望する結果

ABCA.md
CABA.md


559:デフォルトの名無しさん
12/02/16 23:16:14.43
人に頼む書き方じゃねえな、スルー。

560:デフォルトの名無しさん
12/02/17 00:14:04.83
(?!BCAA)[A-Z]{4}¥.md

561:デフォルトの名無しさん
12/02/17 03:18:38.64
全角きんもーっ☆

562:hidi and peter
12/02/17 21:26:44.99
> 559
知らなかったら、別に書き込まなくてもいいんだぜ。

> 560
ありがとう。'(?!sudo)\w{4}\.md' で、もうちょい便利に使えた。
pcretestで色々と試すと楽しいな。

563:デフォルトの名無しさん
12/02/18 00:03:16.80
●正規表現の使用環境
PHP5.3

●検索か置換か?
置換

●説明
ページ内にある<h2>~<h6>に対して内側に<span>を入れたいです。
hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。
何卒ご教授お願いいたします。

●対象データ
<h2>あああああ</h2>
<h2 class="hoge">あああああ</h2>
<h2><span>あああああ</span></h2>
以下h6まで同様
<h6>あああああ</h6>
<h6 class="hoge">あああああ</h6>
<h6><span>あああああ</span></h6>

●希望する結果
<h2><span>あああああ</span></h2>
<h2 class="hoge"><span>あああああ</span></h2>
<h2><span>あああああ</span></h2>
以下h6まで同様
<h6><span>あああああ</span></h6>
<h6 class="hoge"><span>あああああ</span></h6>
<h6><span>あああああ</span></h6>

564:デフォルトの名無しさん
12/02/18 00:11:54.50
(<h[2-6][^>]*>)(?!<span>)(.*)(?<!</span>)(</h[2-6][^>]*>)
\1<span>\2</span>\3

565:デフォルトの名無しさん
12/02/18 00:46:49.73
>>563
classがある場合「など」もって何よ?
質問する側が仕様をあいまいにするとかありえない

566:デフォルトの名無しさん
12/02/18 00:49:05.49
最近質問者につっかかる奴が多いな
同一人物か?

567:デフォルトの名無しさん
12/02/18 00:52:55.18
なーいふみたいにとがあてわ
さーわるものみなきずつけたー

568:デフォルトの名無しさん
12/02/18 01:09:14.81
つっかかる奴が多いんじゃなくて>>563みたいなゴミが増えたんだろ
曖昧な仕様を提示するとかマジ知能障害

ゴミが増えたらゴミを片付ける奴が増えるのが自然
つっかかる奴を減らしたかったらまず>>563みたいな人間のクズを減らせ

569:デフォルトの名無しさん
12/02/18 01:23:46.84
答えてるやつがいるからいいじゃん。なんとかとハサミは使いよう。

570:デフォルトの名無しさん
12/02/18 01:28:45.66
>>564
ありがとうございました。

素人丸出しの質問で申し訳ありませんでした。
“など”と書きましたのはidやstyle等のclass以外の属性も考えられると思ったため、
つい曖昧な書き方になってしまいました。

571:563
12/02/18 01:30:45.70
メール欄に番号いれるとか、、、
知障と言われても仕方ない。
スレ汚し失礼しました。

572:デフォルトの名無しさん
12/02/18 03:01:24.21
いま秀丸エディタで正規表現使って
あれこれ修正しているけど
おすすめの、正規表現を搭載できるエディタってある?
秀丸よりも優れた奴

Eclipseはまた別。すでに使ってるので

573:デフォルトの名無しさん
12/02/18 04:27:54.67
正規表現ライブラリを変更できるやつか。
さくらは。

574:デフォルトの名無しさん
12/02/18 07:20:52.28
linuxでsed。

575:デフォルトの名無しさん
12/02/18 07:24:39.58
鬼車が使えるエディタがあれば最強だろうけど知らないな

576:デフォルトの名無しさん
12/02/18 07:33:09.51
1. 概要
 Tatsuo Baba氏による正規表現ライブラリである Bregexp.dll 互換の正規表現ライブラリです。Windows アプリで Perl 互換の正規表現が使えるようになります。
 正規表現エンジンとして、鬼車 (Oniguruma) を改良した鬼雲 (Onigmo, Oniguruma-mod) を採用することにより、オリジナルの Bregexp.dll よりも高度な正規表現を使用できるようになっています。


2. 動作環境
Windows 98 / 2000 / XP / Vista (x86/x64) / 7 (x86/x64)
(Windows 95/ME/NT4 は動作未確認)
bregonig.dll または Bregexp.dll に対応したアプリケーション
作者が動作を確認したアプリケーションは以下の通りです。ただし、動作を保証するものではありません。
K2Editor r.1.5.7 Build 519 (k2regexp.dll)
JmEditor2 Version 2.0.25
サクラエディタ Ver. 1.6.4.0
Spam Mail Killer Ver.2.28
INCM version 1.23c
ttPage-R Ver.0.98r28
秀丸エディタ Ver7.00 + BRegIf.DLL v0,0,2,2
Speeeeed Ver1.43
URLリンク(homepage3.nifty.com)

577:デフォルトの名無しさん
12/02/18 10:37:23.75
>>576
高田さん、なんでトリップ使わないの?

578:デフォルトの名無しさん
12/02/18 10:44:15.91
>>577
どうして高田さんだと思うの?

579:デフォルトの名無しさん
12/02/18 13:45:36.73
秀丸のhmjre.dllで全角スペースをサロゲートペアで検索したいのですがどう書くのでしょうか?

580:デフォルトの名無しさん
12/02/18 15:53:38.83
>>579
全角スペースのUnicodeコードポイントは
U+3000だからサロゲートペアじゃないよ

581:デフォルトの名無しさん
12/02/18 17:15:43.60
秀丸の正規表現でx0aとか\uxxxxみたいな漢字で全角スペースを書く場合は
どう書けばよいのでしょうか?

582:デフォルトの名無しさん
12/02/18 21:50:14.41
>>563
いまさらだけど。
h2 -> h2><span
って置き換えればよかったんじゃ


583:デフォルトの名無しさん
12/02/18 22:04:13.43
>>582
>hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。

584:デフォルトの名無しさん
12/02/18 22:39:16.21
>>581
秀丸はライセンス持ってないから試せないけど、
\x8140
\x{8140}
\x81\40
\u3000
のどれかでマッチしませんか?

585:486
12/02/18 22:43:49.73
>>554
それで上手く行きましたでしょうか?
もしかしたら正規表現よりもC言語やobjectiv-cの言語仕様が優先されて
ダブルクォートをエスケープするか
ダブルクォートを\x22のような16進コード指定すべきだったかもと
今更ながらに気になってます

586:デフォルトの名無しさん
12/02/18 23:03:10.90
>>583
ああ、引き継ぎたいってそっちだったのか。てっきり挿入するspanに引き継ぐのかと勘違いしてた。
例も見ずにすまんかった。

587:デフォルトの名無しさん
12/02/18 23:07:20.02
>>584
\u{3000}で出来ました!ありがとうございます

最後にこの全角スペースが3000っていう数字になる事はどうやって調べられますか?

588:デフォルトの名無しさん
12/02/18 23:34:51.97
>>587
>\u{3000}で出来ました
本当に出来たのか?
この記法は文字クラス内限定のはずだが...

589:デフォルトの名無しさん
12/02/18 23:39:09.69
>>587
Windows使ってるならIMEパッドでも見れるし、テキストファイルをバイナリエディタで見てもいいし、
URLリンク(www.unicode.org) に行ってもいい(これを見るならIMEパッドで十分ともいえるけど、本家なので)

590:デフォルトの名無しさん
12/02/18 23:51:45.21
>>588
はい、ちゃんと[]野中に書きました

591:デフォルトの名無しさん
12/02/18 23:53:32.21
>>590
ありがとうございます

592:584
12/02/19 00:14:44.44
>>587
ごめん\x81\40は誤記なので
\x81\x40
でももう1度試してみて

あと秀丸にはステータスバーに、
カーソル位置のコードポイント表示機能があるみたいだよ
(この画面ショット見る限りではU+形式のUnicodeコードポイント表示されるのかはわからないけど)
URLリンク(hide.maruo.co.jp)

593:デフォルトの名無しさん
12/02/19 00:40:16.13
>>592
多分、581はshift-jisのコード表記はしたくないんじゃないの。
hmjre.dllだと同じ文字を表していても意味が異なるよ。
ex
[\u{3000}-\u{3005]}] //unicode順の範囲指定[ -々]
[\x81\x40-\x81\x58] //shift-jis順の範囲指定[ -々]


594:デフォルトの名無しさん
12/02/19 00:41:17.26
おっと、]がひとつ余分だった

595:デフォルトの名無しさん
12/02/25 16:38:53.37
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
りんご=20 以外を削除したい

●対象データ
みかん10 りんご20 バナナ30
いちご40 めろん20 りんご20

●希望する結果
りんご20
りんご20

よろしくお願いします

596:デフォルトの名無しさん
12/02/25 16:41:10.77
こちらこそよろしくお願いします

597:デフォルトの名無しさん
12/02/25 18:16:23.54
.*(りんご20).*
\1

598:デフォルトの名無しさん
12/02/26 03:09:03.64
それ複数に対応できてない

599:デフォルトの名無しさん
12/02/26 09:59:59.82
複数文字列の否定は(?!りんご20)みたいな否定先読みが
常套手段だけど、今回みたいな否定箇所以外を全置換には対処できないね

>>537のいう文字クラス内での否定文字のグルーピングが
C#(.net framework)の正規表現でも使えれば簡単なんだけどね

600:デフォルトの名無しさん
12/02/26 10:25:58.34
>>595
perlの正規表現ならワード境界の¥b使って

s/¥b(?!りんご20)¥S+[^¥S¥n]*//g

でいけるけどね。C#はわからん。


601:デフォルトの名無しさん
12/02/26 13:07:26.58
>>595
Regex.Matchesメソッドを1行ずつforeachで回して
マッチした単語を1行毎に連結していけば
とりあえず結果は同じになるんじゃないかと

・・・そういう妥協はだめ?

602:デフォルトの名無しさん
12/02/26 14:30:46.84
>>595
これ "りんご=20" と改行以外を削除だよね。
1行辺りの "りんご=20" の数を数えて "りんご=20" をn個並べる処理をforeachすればいいんじゃない?


603:デフォルトの名無しさん
12/02/26 17:38:21.92
正直一番簡単なのは
1:りんご20を他で使ってない文字か記号に置換
2:その文字以外全部空文字に置換
3:その文字をりんご20に置換
だと思うよ
なんでも無理に一回で済ますのがいいことなわけじゃないしさ

604:デフォルトの名無しさん
12/02/26 17:52:43.21
そもそも、 あおりんご20 の場合はどうなるのだ。

605:デフォルトの名無しさん
12/02/26 19:11:05.43
* おおっと *

606:デフォルトの名無しさん
12/02/27 18:34:09.00
問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが
秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています

▼メールアドレス
aaaaaaaaaa@aaaaaaaaa.com

▼メールアドレスという文字列の下にある行だけを検索することは可能でしょうか?

メールアドレスにマッチする正規表現を使用するとヘッダー内のよくわからないアドレスまで抽出されてしまい
とても面倒くさいのでどうにか文章の下にある行のみを抽出という手段を取りたいのです

どうか解決策をご教授ください


607:デフォルトの名無しさん
12/02/27 18:45:49.84
(?<=^▼メールアドレス$\n)^.*$

608:デフォルトの名無しさん
12/02/27 22:49:40.74
>>607
レスありがとうございます

エディタは秀丸エディタを使用していまして
grebで教えて頂いた正規表現を入力すると

HmJre.dllの正規表現で前方一致/不一致"(?<!xxx)","(?<=xxx)"では改行文字を使うことが出来ません。

というエラーが出て思うように動作しませんでした・・・

609:デフォルトの名無しさん
12/02/27 23:07:03.41
(?<=^▼メールアドレス)$\n^.*$

改行も引っかかっちゃうけど検索するだけならいいかな

610:デフォルトの名無しさん
12/02/28 05:03:46.79
>>609
レスありがとうございます

あとで取り除くので改行も全然引っかかっていいのですが
(?<=^▼メールアドレス)$\n^.*$
で検索するとなにも検索に引っかかりませんでした

環境は
Win7 64bit
秀丸エディタ64 v8.13 Beta7
HMJRE.DLL v3.41
です

ああああああああああああああ
ああああああああああああああ

▼メールアドレス
test@test.com

いいいいいいいいいいいいいい
いいいいいいいいいいいいいい

元となる文章はこんな感じです
よろしくお願いします

611:デフォルトの名無しさん
12/02/28 06:11:47.05
>>610
秀丸の独自仕様をどこかで見たなあ...と思ったらここだったか
>>197-205あたりの
URLリンク(homepage3.nifty.com)
を参考にすれば何とかなるんじゃないかな

612:デフォルトの名無しさん
12/02/28 09:48:11.08
正規表現使うんなら秀丸はないわ。

613:607,609
12/02/28 19:47:54.11
秀丸は環境ないからわからん
詳しい人にまかせた

614:デフォルトの名無しさん
12/02/29 00:15:31.04
>>606
検索でいいの? Grepじゃなくて?
検索なら
(?#fulllinematch)(?\1)▼メールアドレス\n(.+)$
で可能。
ただし秀丸メールv5.70以降に限る。っつーか質問時はバージョン書くもんだぜ…

これはもう秀丸の独自仕様の話題なので、もし続きがあるなら秀丸スレへどうぞ。
スレリンク(software板)

615:デフォルトの名無しさん
12/02/29 00:16:23.90
>>614
こっちだった
スレリンク(software板)

616:デフォルトの名無しさん
12/02/29 00:18:13.93
>>610
ん、バージョン書いてあったのか…って秀丸エディタ? メールじゃなくて?
エディタ v8.13 なら (?#fulllinematch) 使えるがメールはどうだったかな…
連投スマソ

617:デフォルトの名無しさん
12/02/29 00:34:51.64
ここはプログラミング技術の板だから、
プログラミングそのものに関係ないアプリの使い方はアプリ板でやりなよ。
たとえプログラムをエディットするのだとしても。

618:デフォルトの名無しさん
12/02/29 02:43:04.02
皆様レスありがとうございます

>>614
ありがとうございます
(?#fulllinematch)(?\1)▼返信\n(.+)$
で検索対象とマッチすることは出来ましたが
Grepでその部分だけ取り出すということは出来ませんでした・・・

検索ではなくてGrepの対象としてマッチさせたいです

確かにプログラムに関係はありませんでした
>>614さんに誘導して頂いたスレでもう一度質問してみます
スレ汚し失礼いたしました

619:デフォルトの名無しさん
12/02/29 06:45:09.30
^URLリンク(live.nicovideo.jp)(lv[0-9]+)$

^URLリンク(live.nicovideo.jp)(co[0-9]+)$

これってひとつにまとまらない?

620:デフォルトの名無しさん
12/02/29 06:47:34.53
まとま

621:デフォルトの名無しさん
12/02/29 07:10:20.69
>>619
環境書こうぜ
環境不明だから最大公約数の正規表現
^http:\/\/live\.nicovideo\.jp\/watch\/(lv|co)[0-9]+$

622:デフォルトの名無しさん
12/02/29 07:53:10.90
C#のRegexですけど

623:デフォルトの名無しさん
12/02/29 21:20:22.34
>>622
後出しは困るんですけど

624:デフォルトの名無しさん
12/02/29 21:22:26.28
"^URLリンク(live.nicovideo.jp)((lv|co)[0-9]+)"

でいけたです。

625:デフォルトの名無しさん
12/02/29 21:53:01.50
やってやるです。

626:デフォルトの名無しさん
12/03/01 00:46:21.06
>>624
実害ないけど外側の括弧が無意味な件

627:デフォルトの名無しさん
12/03/01 01:00:16.49
>>624
.をエスケープしないとか見てるとイライラする
職場でこういう正規表現見つけたら速攻バグ登録するんだけど、
書いた奴は正常系でテストして問題なかったとか
自分の無知を認めない言い訳ばかり

628:デフォルトの名無しさん
12/03/01 01:06:37.19
バグレポートの仕方が悪いんだろ
ちゃんとどういう問題があるか認識させてやれよ

629:デフォルトの名無しさん
12/03/01 01:14:56.50
.NETだろ

630:デフォルトの名無しさん
12/03/01 01:45:00.45
>>626
外側はURLの可変部分だからいかにも後で参照しそうな箇所じゃないか
そこらへん質問では示されてないけど

631:デフォルトの名無しさん
12/03/01 19:16:48.23
>>630
その辺を考えてる人なら?:も使うよ
だからただの余分な括弧だと思う。

632:デフォルトの名無しさん
12/03/04 00:15:07.64
質問させてください、環境はWSH(JScript)です
2chのdatファイルは1行目が↓こうなってますが
名前<>メル欄<>日付 ID<> 本文 <>スレタイ 改行
スレタイだけを抜き出すにはどうしたらいいでしょうか?
↓こんなのしか浮かびません…
line = str.replace(/<>(.*?)$/,"$1");

633:デフォルトの名無しさん
12/03/04 00:17:53.46
それを実行したらどうなった?

634:デフォルトの名無しさん
12/03/04 00:26:17.22
>>633
一行丸々抜き出されました…

635:デフォルトの名無しさん
12/03/04 00:53:23.20
これで一応行けました、強引?
title = str.replace(/(?:.*?<>.*?<>.*?<>.*?<>)(.*?)$/,"$1");
もっといい方法あれば教えてください

636:デフォルトの名無しさん
12/03/04 01:01:21.24
>>635
^(?:.+?<>){4}(.+)$

637:デフォルトの名無しさん
12/03/04 01:12:39.05
>>636
ありがとうございます!

スレタイが空文字はありえないですよね、確かに
ただ、メル欄(名前も?)は空文字がありえるんですよ…

638:デフォルトの名無しさん
12/03/04 01:15:23.62
あ、これでいいのか。>>636さんありがとう
^(?:.*?<>){4}(.+)$


639:デフォルトの名無しさん
12/03/04 13:39:30.67
ほんと2chまとめ系の質問多いな。

640:デフォルトの名無しさん
12/03/04 14:40:56.64
でも2chで業務に関わる正規表現を相談するわけにもいかないし

641:デフォルトの名無しさん
12/03/04 18:18:09.44
ただでアフィの手伝いするなんてお人好しだな。

642:632
12/03/04 19:46:44.88
あ、一応弁解しとくと私はアフィサイトとかじゃないですよ
気になったスレをhtml変換して保存したいという、正規表現の練習も兼ねた趣味です
誤解があったらすみません
そもそもまとめをJScriptでちまちま変換してる人いるのかな?

643:デフォルトの名無しさん
12/03/04 22:03:16.25
そうか、2ちゃんねるまとめサイトか…

644:デフォルトの名無しさん
12/03/04 22:26:36.94
>>642
ちまちました変換をしてる人がいるかどうかじゃなく、
その変換のやり方を聞いてくる人に、2chまとめ系がおおいってことだわ。

645:デフォルトの名無しさん
12/03/04 22:27:38.98
ついでにいうと、スレタイを取得するために正規表現を使う人は少ないと思う。
正規表現がいいよっていわれたのかもしれないけど。

646:デフォルトの名無しさん
12/03/07 16:52:50.44
質問です

phpのpreg_replaceで文字列を入れ替えたいのですが

<a href="mailto:example@example.com">問い合せ</a>

のexample@example.comのみを入れ替えるにはどのような正規表現を使えば出来るでしょうか?

よろしくお願いします



647:646
12/03/07 16:54:14.75
ちなみにアドレスはexample@example.com固定とは限りません
よろしくお願いいたします

648:デフォルトの名無しさん
12/03/07 18:51:22.57
>>646
メールアドレスであることに拘らなければいいだけの話
mailto:の後ろにメールアドレス以外が来ることなんて普通ないだろ?
とりあえず/"mailto:.+?"/とかでいいんじゃね

649:デフォルトの名無しさん
12/03/07 19:19:21.86
>>648
レスありがとうございます
/"mailto:.+?"/とするとmailto:までマッチしてしまうのですが
メールアドレスのみマッチさせるのは不可能でしょうか?

よろしくお願いいたします

650:デフォルトの名無しさん
12/03/07 20:52:24.59
簡易的なチェックで良ければ、
「メールアドレス 正規表現」でググれば、例示がいっぱいあるよ。

651:デフォルトの名無しさん
12/03/07 22:47:27.20
>>649
>>3
> 【 初心者 】 正規表現 【 入門 】
> URLリンク(funcchan.blog16.fc2.com)

652:デフォルトの名無しさん
12/03/08 04:02:28.94
>>649
(?<="mailto:)[^"]+
かな

653:デフォルトの名無しさん
12/03/08 16:31:53.87
boku@jitakusa-ba.com のboku部分とjitakusa-ba部分を抽出する
正規表現を /(.*)@(.*)/ と書いたのですがちょっとエッチだなと思いました。

654:デフォルトの名無しさん
12/03/08 20:00:04.53
>>653
メールアドレスはシンプルな正規表現では書けないんだ!
現実を受け入れろ!

655:デフォルトの名無しさん
12/03/08 21:20:12.15
メールアドレスが正しいかどうかはかけないけど、アカウントとドメインを分割するのには>>653である程度大丈夫。
"nanasi@home"@example.com
には対応できないけど、別にいいと思う。

656:デフォルトの名無しさん
12/03/08 21:46:59.98
>>653でも最長一致優先探索ならそれは処理できるね。
(.*)@([^@]*)とするとアルゴリズムに関係なくましになるかね。

657:デフォルトの名無しさん
12/03/09 00:35:53.46
どうせならこうするのが正解でしょ
([^@]+)@([^@]+)

658:デフォルトの名無しさん
12/03/09 00:49:12.02
([^@]+)@([^@]+) <ブヒブヒ

659:デフォルトの名無しさん
12/03/09 03:57:50.08
>>657
改悪

660:デフォルトの名無しさん
12/03/09 16:01:56.77
>>649
だから、分かんないんだから無理しないで
"mailto:置換前の文字"

"mailto:置換後の文字"
に置き換えれば分かりやすくて確実だろって言ってるの
お前の目的はmailto:の後ろを置換することであって正規表現でメールアドレスに確実にマッチさせることじゃないだろうが

661:デフォルトの名無しさん
12/03/10 17:07:42.45
>>660
それは極端だ

662:デフォルトの名無しさん
12/03/10 17:48:08.06
そうか?

663:デフォルトの名無しさん
12/03/10 21:28:51.98
目的が達成されれば良いわけだから、俺はありだと思うけどな

664:デフォルトの名無しさん
12/03/10 21:30:46.34
俺もそう思う。目的と手段を間違えないようにすることは大切だ

665:デフォルトの名無しさん
12/03/10 23:02:06.25
「メールアドレスを拾いたい」
のか、
「mailto:○○ を置換したいのか」
の違いでしょ。

>>660の案に自分も一票。

666:デフォルトの名無しさん
12/03/10 23:51:43.33
>>664
プログラマと呼ばれる人たちには案外それを間違う人が多い気がする
だが新しい発想てのは稀にそういうとこから生まれたりするから否定はしない

667:デフォルトの名無しさん
12/03/11 01:30:19.58
「結果は一緒ですよ?」って言っても「いやいや、ダメだよ」っていう人に職業は関係ない
不慣れな人だからこそ「一緒ならやっといてよ」って感じで無知な押し付けをする人もいる

668:デフォルトの名無しさん
12/03/14 17:47:55.35
秀丸エディタのgrep(HMJRE.DLL V1.79)で
"hoge"という単語を検索するときに
'.'に続くもの以外を全て検索したいときの書き方を教えてください。

" hoge" ",hoge" 等は検索したいけど
".hoge"は検索したくありません


669:デフォルトの名無しさん
12/03/14 18:13:18.47
否定戻り読みを使う
(?<!\.)hoge
直前に\.が来ないhoge

サポートされてない時は[^.]hoge|^hogeで我慢

670:デフォルトの名無しさん
12/03/14 18:18:27.81
>>669
ありがとうございます。上手く行きました。

671:デフォルトの名無しさん
12/03/15 03:24:26.09
sedです

foo
bar
*piyo
*hoge
*zieg
kero
piyo
のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。
foo
bar
[
*piyo
*hoge
*zieg
]
kero
piyo

sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません
どうか御教示願います。

672:デフォルトの名無しさん
12/03/15 16:52:40.88
awk だが
awk '{ if ($0 ~ /^\*/) { if (!flag) print("["); print($0); flag = 1; } else { if (flag) print("]"); print($0); flag = 0; } }'

673:デフォルトの名無しさん
12/03/15 16:56:41.39
>>671
sedスレへ
スレリンク(unix板)

674:デフォルトの名無しさん
12/03/15 17:32:39.72
perlだが
perl -0777pe "s/((?:\*.*?\n)+)/[\n$1]\n/g"

675:デフォルトの名無しさん
12/03/15 17:41:29.31
もっと短くしなさい

676:デフォルトの名無しさん
12/03/15 18:06:33.62
>>674
a*hoge

677:デフォルトの名無しさん
12/03/15 18:18:06.63
>>676
perl -0777pe "s/((?<!a)(?:\*.*?\n)+)/[\n$1]\n/g"

678:デフォルトの名無しさん
12/03/15 18:21:22.40
違うそうじゃない

679:デフォルトの名無しさん
12/03/15 18:21:41.49
>>677
foo*hoge

680:デフォルトの名無しさん
12/03/15 22:59:16.86
ワンライナーが集団で現れた

681:デフォルトの名無しさん
12/03/15 23:25:50.72
>>103
亀、正規表現一発じゃないけど

$data =<<'HERE';
みんなの憧れ Justin Drew Bieber が大好き
私だけの Justin が欲しい
やっぱ Bieber 、Bieber って響きがいいよね
HERE

@ary = split(/ | /, $data);
$result = '';
for (@ary) {
$isCurrentHankaku = /^[A-Za-z]/ ? 1:0;
$result .= $isPreviousHankaku & $isCurrentHankaku? " $_": "$_";
$isPreviousHankaku = /[A-Za-z]$/ ? 1:0;
}
print $result;

682:デフォルトの名無しさん
12/03/16 01:17:05.36
Unicodeからむと正規表現が長くなるね

perl -CS -pe 's/(?<=\p{Latin})\p{Zs}+(?=\P{Latin})//g;s/(?<=\P{Latin})\p{Zs}+(?=\p{Latin})//g' <input

683:デフォルトの名無しさん
12/03/16 01:26:04.67
なんで2回してるの?

684:デフォルトの名無しさん
12/03/16 01:32:24.07
あ、そういうことか

685:デフォルトの名無しさん
12/03/16 18:26:27.29
Windows PowerShellから.Netのクラスを使用してチカン

$v = "会場[大磯ロングビーチ]"
[System.Text.RegularExpressions.Regex]::Replace($v, "^会場\[(.+)\]$","$1")

期待する結果:"大磯ロングビーチ"
実際:""

どうしてですか?
"大磯ロングビーチ"ってチカンするにはどうしたらいいのでしょうか


686:デフォルトの名無しさん
12/03/16 20:54:07.96
大磯ロングビーチに行って女の子のオパイをモミモミすれば良いよ


タイホ

687:デフォルトの名無しさん
12/03/16 22:13:07.37
>大磯ロングビーチ
もう存在しない。

688:デフォルトの名無しさん
12/03/16 23:11:23.76
>>685
""で囲んだ文字列は変数展開が有効になってる
抑制したいときは '' を使う(もしくは`)

[System.Text.RegularExpressions.Regex]::Replace($v, '^会場\[(.+)\]$','$1')

ちゅーか、$v -replace '^会場\[(.+)\]$','$1' でええやん
もしくは[Regex]::Replace($v, '^会場\[(.+)\]$','$1')


689:デフォルトの名無しさん
12/03/20 22:21:48.94
<que name="" mail="" vpos="-45400">/publish lv80605616_t2B_SHD_7@s35841 /content/20120319/lv80605616_214226439000_1_8370f8.f4v</que>
この文字列から

/content/20120319/lv80605616_214226439000_1_8370f8.f4v
の部分を抜き出すにはどうすればいい?

数字とかは毎回変わるんだけど

690:デフォルトの名無しさん
12/03/20 23:41:40.87
que.innerHTMLで/publish lv8.....f4v が取れるから後は好きなようにする

691:デフォルトの名無しさん
12/03/20 23:45:01.69
>>689
>>660

変わらないところはべた書きして「毎回変わる」ところは.+?にでもしとけ
/<que.+?(\/content\/.+?f4v\/)<\/que>/

692:デフォルトの名無しさん
12/03/21 07:11:36.55
>>691
それだと可変の文字列内にたまたまf4vの文字列が出てきたらNG
.+で最長マッチにしておくか可変の文字列内に記号(.)が出てこない仕様ならば
/<que.+?(\/content\/.+?\.f4v\/)<\/que>/
の方がよさそう

693:デフォルトの名無しさん
12/03/21 07:38:17.77
できました

694:デフォルトの名無しさん
12/03/21 12:53:29.40
わざわざqueとか調べなくても/contentから<までをとればいいんでないの

695:デフォルトの名無しさん
12/03/24 08:11:28.17
Objective-CのNSRegularExpressionで、
行頭の半角スペース列を置換しようとして@"^ +"と書いたのですが、文字列の最初しか行頭と認識してくれないらしく、
複数行にまたがる文字列の各行頭のスペースが置換できないので、改行文字に続く次のスペースも検出しようとして
@"^ +|\\n +"
と書くと、改行文字も含めて置換してしまうため、マッチ部分をキャプチャする()を使って
@"^( +)|\\n( +)"
としたのですが、
(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。
文字列途中も含めて、行頭の半角スペース列のみを置換するためにはどのようなパターンを使うのが適切でしょうか?

696:デフォルトの名無しさん
12/03/24 08:46:28.26
>>695
URLリンク(developer.apple.com)

のTable 4 Flag Optionsを参考に、
mフラグを有効化して正規表現を複数行モードで
動作させればうまくいくかも

697:デフォルトの名無しさん
12/03/24 10:41:37.22
>>696
ありがとうございます!出来ました。

698:デフォルトの名無しさん
12/03/24 10:43:25.54
Comp
URLリンク(technet.microsoft.com)(v=ws.10).aspx

699:デフォルトの名無しさん
12/03/24 11:34:08.06
半角かっこはencodeして欲しい。
URLリンク(technet.microsoft.com)


700:デフォルトの名無しさん
12/03/25 01:29:15.20
700GET

701:デフォルトの名無しさん
12/03/25 04:06:16.60
private class Person
{
 public String personText = "Person";
}

private class Student : Person
{
 private String studentText = "Student";
 
 public String getText()
 {
  return (personText + studentText);
 }
}

public class Entry {
 public static void test(Person p) {
  Student s = p as Student;
  Console.Write(s.getText());
 }
}

これで、Entry.testをコールした後、GCでstudentTextは解放されるのでしょうか?

702:デフォルトの名無しさん
12/03/25 04:47:56.03
誤爆か

703:デフォルトの名無しさん
12/03/25 12:40:22.05
すみません、前と似たような質問なんですが
Objective-CのNSRegularExpressionで、
数値実体参照を置換しようとして、@"&#[0]*([1-9][0-9]*);?"と書いたのですが、
&#xまた&#Xで始まる16進表記に対応できないので、16進表記にも対応しようとして
@"&#[0]*([1-9][0-9]*);?|&#[xX][0]*([1-9A-Fa-f][0-9A-Fa-f]*);?"
としたのですが、
やはり(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。
また、エラーが出なかったとしても10進か16進かがわからないので、再度プリフィクスが&#か&#xか調べないといけないので効率が悪い感じです。
10進も16進もマッチし、かつ10進か16進かを識別するためにはどのようなパターンを使うのが適切でしょうか?

704:696
12/03/25 13:38:44.57
>>703
10進にマッチした時と16進にマッチした時で置換後の文字列を変える目的や
それぞれどんな文字列に置換したいのがわからないと何とも言えません

多くの正規表現実装では()でグルーピングする度に
$1から連番で「キャプチャ」され、置換後文字列として$1や$2…でキャプチャされた部分を取り出せますが、
今回のケースで有用かが不明です

$nの詳細は>>696のリンク先のTable 3 Template Matching Format参照

705:デフォルトの名無しさん
12/03/25 14:02:53.15
>>704
ありがとうございます。
10進と16進で処理を変えたいのは、マッチした部分をキーにしてディクショナリから置換後の文字列(というか文字)を取り出すさい、
16進のキーはディクショナリに用意していないので、いったん10進文字列に変換してから同じようにディクショナリにアクセスさせたいためです。(変換メソッドは10進か16進か自動判別してくれないのでここで処理を分ける他ありません。)
$の使い方についてなのですが、キャプチャされた部分を取り出して$表記を用いた別の文字列(template)にキャプチャした部分を埋め込めるというのは分かるのですが
別の文字列のある部分を$~に置換するのではなくて、$でキャプチャした元の文字列自体を置換したいので、今回使えるかどうかはよくわかりませんでした
いろいろやってみたところrangeがぶっ飛んだ値になるのは、()を|などで分けて2つ以上設定した際に、マッチしなかった()について対応するインデックスのrangeのlocationがNSIntegerの最大値に設定されてしまうらしく
その値で分岐して、locationがNSIntegerMAXではないほうをキーとして取り出し置換することでとりあえず上手くいきました。

706:デフォルトの名無しさん
12/03/25 14:54:16.01
[xX]もキャプチャすれば判断できそうだけど。
置換対象はマッチした文字列全体でいいのでは。その環境使ったことないので、もし全体が取れないのなら全体をキャプチャ

707:696
12/03/25 15:36:35.36
>>706
マニュアル読む限り、$0でマッチした文字列全体みたい
自分も環境がないので試してはいませんが

708:デフォルトの名無しさん
12/03/25 20:21:11.43
>>705
「locationがNSIntegerMAXではないほうをキーとして取り出し」
で解決したみたいだけど、正規表現のマッチ文字列による処理分岐させる王道はこんな感じで、
OR条件は正規表現の|に頼らずに言語のif~else文使うのが良いかと

before = 文字参照文字列
if hoge =~ /�*([1-9][0-9]*);?/
after = searchDic($1)
elseif hoge =~ /&#[xX]0*([1-9A-Fa-f][0-9A-Fa-f]*);?/
after = searchDic(hex2Dec($1))
else
文字参照じゃなかったよ


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